2016-06-08 85 views
0

提取匹配给定一个字符串从正则表达式

""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!!?" 

我目前使用的正则表达式是"(.*)(.*)"并根据匹配没关系此工具

enter image description here

我的问题是提取两场比赛作为单独的字符串。

var pattern = new Regex(@"""(.*)(.*)""", RegexOptions.None); 
var matches = pattern.Matches(text); 

matches不包含两个元素。我究竟做错了什么?

+0

类似['(?<=“)”。*?“(?=”)'](https://dotnetfiddle.net/yktEVu)? –

+0

如果你不想提取这两个组,使用'Regex.Match'来获得一个'Match'对象,它包含你之后的两个'Groups'(1和2)。 – ClasG

+1

对你的正则表达式的一个解释:因为'.'匹配任何字符**但是**'新行',你会得到两个捕获组,由一个'new line'分隔,并以'new line'结尾,即前两行。 – ClasG

回答

1

尝试使用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); 

See it here at ideone

+0

我不确定这是OP在找什么。 OP只有一个输入字符串,并且正在查找两个引号之间的两个字符串。 –

+0

@Verarind这也是我的第一个想法。但是由于这两个字符串已经分开,我收集到了这是OP想要的东西。但我不确定...... – ClasG

+0

原始文本是由一个换行符分隔的。 – lxkmxl