C#RegExstring提取

我有一个string:

“ImageDimension = 655×0; ThumbnailDimension =为0x0”。

我必须提取在“ImageDimension =”和第一个“x”之间出现的第一个数字(“655”string); 并且需要提取在“ImageDimension =”string之后出现的第一个“x”之后出现的第二个数字(“0”string)。 与第三和第四个数字相似。

这可以用正则expression式(“ImageDimension = x?; ThumbnailDimension = x ”)和如何? 而不是笨拙的子串和索引? 谢谢!

我的解决scheme不是很好:

String configuration = "ImageDimension=655x0;ThumbnailDimension=0x0"; String imageDim = configuration.Substring(0, configuration.IndexOf(";")); int indexOfEq = imageDim.IndexOf("="); int indexOfX = imageDim.IndexOf("x"); String width1 = imageDim.Substring(indexOfEq+1, indexOfX-indexOfEq-1); String height1 = imageDim.Substring(imageDim.IndexOf("x") + 1); String thumbDim = configuration.Substring(configuration.IndexOf(";") + 1); indexOfEq = thumbDim.IndexOf("="); indexOfX = thumbDim.IndexOf("x"); String width2 = imageDim.Substring(indexOfEq + 1, indexOfX - indexOfEq-1); String height2 = imageDim.Substring(imageDim.IndexOf("x") + 1); 

这将为您获得每个值为单独的整数:

 string text = "ImageDimension=655x0;ThumbnailDimension=0x0"; Regex pattern = new Regex(@"ImageDimension=(?<imageWidth>\d+)x(?<imageHeight>\d+);ThumbnailDimension=(?<thumbWidth>\d+)x(?<thumbHeight>\d+)"); Match match = pattern.Match(text); int imageWidth = int.Parse(match.Groups["imageWidth"].Value); int imageHeight = int.Parse(match.Groups["imageHeight"].Value); int thumbWidth = int.Parse(match.Groups["thumbWidth"].Value); int thumbHeight = int.Parse(match.Groups["thumbHeight"].Value); 
 var groups = Regex.Match(input,@"ImageDimension=(\d+)x(\d+);ThumbnailDimension=(\d+)x(\d+)").Groups; var x1= groups[1].Value; var y1= groups[2].Value; var x2= groups[3].Value; var y2= groups[4].Value; 
 var m = Regex.Match(str,@"(\d+).(\d+).*?(\d+).(\d+)"); m.Groups[1].Value; // 655 .... 

 (\d+) 

获取第一组一个或多个数字。 并将其存储为整个比赛之后的第一个被捕获的组

 . 

匹配任何字符

 (\d+) 

获取下一组一个或多个数字。 并将其作为第二个被捕获的组在整个比赛之后存储

 .*? 

匹配和非贪婪的任何字符的数量。

 (\d+) 

获取下一组一个或多个数字。 并将其作为第三个被捕获的组在整个比赛之后存储

 (\d+) 

获取下一组一个或多个数字。 并将其作为第四个被捕获的组在整个比赛之后存储

既然很多人已经给了你想要的东西,我会用别的东西来贡献。 正则expression式很难阅读和容易出错。 也许有一点比你的实现更详细,但比使用正则expression式更直接和友好:

 private static Dictionary<string, string> _extractDictionary(string str) { var query = from name_value in str.Split(';') // Split by ; let arr = name_value.Split('=') // ... then by = select new {Name = arr[0], Value = arr[1]}; return query.ToDictionary(x => x.Name, y => y.Value); } public static void Main() { var str = "ImageDimension=655x0;ThumbnailDimension=0x0"; var dic = _extractDictionary(str); foreach (var key_value in dic) { var key = key_value.Key; var value = key_value.Value; Console.WriteLine("Value of {0} is {1}.", key, value.Substring(0, value.IndexOf("x"))); } } 

当然,这很容易。 正在寻找的正则expression式模式是:

 ^ImageDimension=(\d+)x0;.+$ 

比赛中的第一组是你想要的数字。