從我的理解,你想匹配任何句子結尾的?!和省略號'...',而忽略「」中的文本。你也不想結束任何單個數字或資本,然後是?!。或...
在這種情況下,這將工作:
([^„]*?(„[^「]+?「)*)+?(?<!\b[\dA-Z])([?!]|[.]{1,3})
代碼示例:
public static void Main()
{
string pattern = @"([^„]*?(„[^「]+?「)*)+?(?<!\b[\dA-Z])([?!]|[.]{1,3})";
string input = "Šios sutarties sąlygos taikomos „Microsoft. Hotmail「, „Microsoft. SkyDrive「, „Microsoft「 abonementui.";
var matches = Regex.Matches(input, pattern);
foreach(Match match in matches)
{
Console.WriteLine(match.Value.Trim());
}
}
輸出繼電器:
SIOS sutartiessąlygostaikomos「微軟。 Hotmail「,」微軟。 SkyDrive「,」微軟「abonementui。
對於輸入:1.The „Acme. Photo「 is good. Test string „Microsoft. Hotmail「... Some more text? Even more text! Final text.
輸出繼電器:
1.「Acme公司。照片「很好。
測試字符串「Microsoft。 Hotmail「...
還有一些文字?
更多文字!
最終文本。
說明正則表達式:([^„]*?(„[^「]+?「)*)+?(?<!\b[\dA-Z])([?!]|[.]{1,3})
[^„]*?
匹配任何不是「」。 *?意味着懶惰的匹配(非貪婪)。
([„][^「]+?[「])*
遵循本場比賽以「」
+?
手段這1次或多次匹配懶洋洋的0個或多個實例(即之前的一切!,?,。,...)
(?<!\b[\dA-Z])
手段做一個負回顧後爲單個數字或大寫字母。基本上不匹配?!或...如果在數字或資本之前。
([?!]|[.]{1,3})
是指與前次比賽?要麼 !或1至3。 (點/句號)
通常我會用(?>)來表現,但我認爲我們會保持正則表達式的簡單。 This site是非常有幫助的。
希望有所幫助。
您的示例文本的預期輸出是什麼? –
這可能有幫助。 http://stackoverflow.com/questions/5695240/php-regex-to-ignore-escaped-quotes-within-quotes – cgTag
我期望得到一個sentense ho從[Šiossutarties ..]開始,直到[... rosoft「abonementui 。],但不是兩個發送:/ –