一个字符串上有数百个RegEx

时间:2011-09-14 06:15:18

标签: java regex nlp machine-learning

跟进我之前的问题 Hundreds of RegEx on one string 我最终得到了一个正如

这样的正则表达式
(section1:|section2:|section3:|section[s]?4:|(special section:|it has:|synonyms:)).*?(?=section1:|section2:|section3:|section[s]?4:|(special section:|it has:|synonyms:)|$)

section section in regex search

我的prod系统中的正则表达式有超过1000个字符,并且多行多行。它所做的只是从大块文本中分割出部分,然后再对这些部分进行单独处理以提取信息。此外,我希望这些部分标题是自然语言容忍的,这就是为什么某些部分可以以多种方式键入,导致正则表达式的大小增加。在性能和可管理性方面有更好的方法吗?

3 个答案:

答案 0 :(得分:4)

使用词法分析器代替正则表达式。

答案 1 :(得分:1)

也许尝试像What's better, ANTLR or JavaCC?中讨论过的那样的解析器生成器?

如果您有自然语言语法,那么您通常会重复使用子语法以允许重新排序。正确的语法比正则表达式更容易维护。

答案 2 :(得分:1)

  1. 要处理此类正则表达式中的效果,您可以使用前缀优化https://code.google.com/p/graph-expression/wiki/RegexpOptimization

  2. 此框架允许您使用Java DSL编写带有样式的regexp。因此它变得可重构和可维护。 https://code.google.com/p/graph-expression/