C# Regex超时何时到多个-

C# Regex超时何时到多个-,c#,regex,C#,Regex,这远远超出了我对正则表达式的知识水平。我以前没有使用过那么多正则表达式,但这是我第一次遇到正则表达式超时的情况 我想做的是在Instagram帖子中找到匹配的单词+3个单词,前后各3个。正如你所知,Instagram上的一些帖子实在太怪异了 这是Instagram的(截短的)帖子: 问题是由于两个随后的子模式被放置在一个量化组中。([a-zA-Z0-9åäääääääääääää-][W+{0,3}部分重复0到3次,并且[a-zA-Z0-9åäääääääääääääää。由于正则表达式引擎使用

这远远超出了我对正则表达式的知识水平。我以前没有使用过那么多正则表达式,但这是我第一次遇到正则表达式超时的情况

我想做的是在Instagram帖子中找到匹配的单词+3个单词,前后各3个。正如你所知,Instagram上的一些帖子实在太怪异了

这是Instagram的(截短的)帖子:


问题是由于两个随后的子模式被放置在一个量化组中。
([a-zA-Z0-9åäääääääääääää-][W+{0,3}
部分重复0到3次,并且
[a-zA-Z0-9åäääääääääääääää。由于正则表达式引擎使用回溯尝试所有可能的方法来匹配文本,因此在这种情况下,步骤的数量变得巨大

解决方法是从
\W
中减去
-

你可以用

\s*([a-zA-Z0-9åäöÅÄÖ_-]+[^\w-]+){0,3}(PokokNyaPAYTRENinAJA(?![^.,!?\s]))([^\w-]+[a-zA-Z0-9åäöÅÄÖ_-]+){0,3}\s*
或者,使用.NET样式:

\s*([a-zA-Z0-9åäöÅÄÖ_-]+[\W-[-]]+){0,3}(PokokNyaPAYTRENinAJA(?![^.,!?\s]))([\W-[-]]+[a-zA-Z0-9åäöÅÄÖ_-]+){0,3}\s*
[\W-[-]]
是一个字符类,其中
\W
匹配任何非单词字符,但
-


请看。

刚刚抛出的问题:您是否考虑过简单地解析字符串而不是使用正则表达式?能否为“正则表达式超时”添加解释和代码示例?@ManfredRadlwimmer您认为我可以解析字符串以在我要找的文本中找到单词是什么意思?Sebastian是对的。只需将
\W+
替换为
[^\W-]
。并删除
\b
,因为它是多余的。看,没有观察到CB(顺便说一句,.NET正则表达式在灾难性回溯方面更有效)。谢谢sebastian和wiktor!那太好了!:)