从我的理解,你想匹配任何句子结尾的?!和省略号'...',而忽略“”中的文本。你也不想结束任何单个数字或资本,然后是?!。或...
在这种情况下,这将工作:
([^„]*?(„[^“]+?“)*)+?(?<!\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 。],但不是两个发送:/ –