【问题标题】:C# the following RegEx too slow on large stringC# 以下正则表达式在大字符串上太慢
【发布时间】:2016-07-06 00:54:27
【问题描述】:

我正在使用以下正则表达式来过滤大字符串:

(?m)(?(^*(?=.*\\btrue\\b)(?=.*\\ba\\b).*\\r*$)(.*)|(?!))

这样做需要很长时间。我在这里做错了什么?是我的模式有问题还是它的字符串长度导致延迟。

请帮帮我。 提前致谢。

【问题讨论】:

  • 这不是一个有效的正则表达式,所以它可能与它不知道如何正确解析它有关。你说的字符串有多长?
  • 我的字符串数据大约有100万个字符。不是不行,只是需要9-10秒。
  • 不使用正则表达式可能会更快,而只需手动处理解析本身。
  • ^* 应该做什么?一开始匹配多次?正如@Dispersia 指出的那样,这个正则表达式是无效的。
  • 我不太熟悉 RegEx。所以如果这个 RegEx 是无效的,我请求你们给我提供一个正确的。目标是:获取包含单词“true”和“a”的每一行。

标签: c# regex filter


【解决方案1】:

好的,我发现这个正则表达式可以使用 AND 运算符处理多个单词(这里我使用的是 2 个单词条件),并且与 @Disperia 指出的错误正则表达式相比,我的旧正则表达式速度很好。奇怪的是,即使是那个工作,但要花很长时间才能产生结果

(?i)(?m)^((?=.*\bword1\b)(?=.*\bword2\b)).*[\r\n]*$.

这是结果的屏幕截图:

【讨论】:

    猜你喜欢
    • 2014-11-10
    • 2014-10-12
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 2013-04-26
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多