从正则表达式
问题描述:
提取匹配给定一个字符串从正则表达式
""Being Ordered Around by You Makes Me Really Angry Somehow!!!" "Whaddaya Mean, 'Somehow'!!?""
""Omae ni Meirei Sareru no wa Nanka Haratatsu!!!" "Nankatte Nani!!?""
我如何可以提取各组双引号(包括其中的双引号),这样我得到两个独立的串像之间的字符串:
"Being Ordered Around by You Makes Me Really Angry Somehow!!!" "Whaddaya Mean, 'Somehow'!!?"
和
"Omae ni Meirei Sareru no wa Nanka Haratatsu!!!" "Nankatte Nani!!?"
我目前使用的正则表达式是"(.*)(.*)"
并根据匹配没关系此工具
我的问题是提取两场比赛作为单独的字符串。
var pattern = new Regex(@"""(.*)(.*)""", RegexOptions.None);
var matches = pattern.Matches(text);
matches
不包含两个元素。我究竟做错了什么?
答
尝试使用Regex.Match
代替Matches
,而这正则表达式
"("[^"]*")[^"]*("[^"]*")"
它相匹配的"
,捕获跟随"
和任何达,和包括,下"
。然后它会匹配下一个"
。然后它重复 - 捕获以下"
和任何事情,包括下一个"
。最后它匹配终止"
。这两个字符串,包括其周围的报价是捕获组1 & 2.
事情是这样的:
string s1 = "\"\"Being Ordered Around by You Makes Me Really Angry Somehow!!!\" \"Whaddaya Mean, 'Somehow'!!?\"\"",
s2 = "\"\"Omae ni Meirei Sareru no wa Nanka Haratatsu!!!\" \"Nankatte Nani!!?\"\"";
Console.WriteLine("Before 1 : " + s1);
Console.WriteLine("Before 2 : " + s2);
Regex r = new Regex("\"(\"[^\"]*\")[^\"]*(\"[^\"]*\")\"");
Match m = r.Match(s1);
Console.WriteLine("After 1.1 : " + m.Groups[1].Value);
Console.WriteLine("After 1.2 : " + m.Groups[2].Value);
m = r.Match(s2);
Console.WriteLine("After 2.1 : " + m.Groups[1].Value);
Console.WriteLine("After 2.2 : " + m.Groups[2].Value);
类似['(?
如果你不想提取这两个组,使用'Regex.Match'来获得一个'Match'对象,它包含你之后的两个'Groups'(1和2)。 – ClasG
对你的正则表达式的一个解释:因为'.'匹配任何字符**但是**'新行',你会得到两个捕获组,由一个'new line'分隔,并以'new line'结尾,即前两行。 – ClasG