1 功能需求
- 匹配字符串
“m1.large(vcpu 2,ram 4G)|c95f5529-47e8-46d4-85da-319eb9905a9b”.
- 目标字符串
vcpu: “2”,ram: “4”,id:“c95f5529-47e8-46d4-85da-319eb9905a9b”.
2 代码实现
using System; using System.Text.RegularExpressions; namespace RegexDemo { class Program { static void Main(string[] args) { var flavorRef = "m1.large(vcpu 2,ram 4G)|c95f5529-47e8-46d4-85da-319eb9905a9b"; Regex regex = new Regex(@"(?<= )[^ \,G]+(?=\,|G)|(?<=\|)[^\|]+"); MatchCollection mc = regex.Matches(flavorRef); var cpu = mc[0].Value; //cpu:2 var ram = mc[1].Value; //ram:4 var id = mc[2].Value; //flavorId:c95f5529-47e8-46d4-85da-319eb9905a9b Console.WriteLine("cpu:" + cpu + " " + "ram:" + ram + " " + "id:" + id); Console.ReadKey(); } } }
+:匹配前面的子表达式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
x|y:匹配x或y。例如,“z|food”能匹配“z”或“food”。“(z|f)ood”则匹配“zood”或“food”。
[^xyz]:负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“p”。
(?=pattern):正向肯定预查。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”。
(?<=pattern):反向肯定预查。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”。
4 附:正则表达式参考手册