2016-06-08 88 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