Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一个字符串上有数百个正则表达式_Java_Regex_Nlp_Machine Learning - Fatal编程技术网

Java 一个字符串上有数百个正则表达式

Java 一个字符串上有数百个正则表达式,java,regex,nlp,machine-learning,Java,Regex,Nlp,Machine Learning,继我的上一个问题之后 我最终得到了一个类似regex的追随者 (section1:|section2:|section3:|section[s]?4:|(special section:|it has:|synonyms:)).*?(?=section1:|section2:|section3:|section[s]?4:|(special section:|it has:|synonyms:)|$) 我的prod系统中的regex有1000多个字符,并且有多行。它所做的只是从一大块文本中分

继我的上一个问题之后 我最终得到了一个类似regex的追随者

(section1:|section2:|section3:|section[s]?4:|(special section:|it has:|synonyms:)).*?(?=section1:|section2:|section3:|section[s]?4:|(special section:|it has:|synonyms:)|$)


我的prod系统中的regex有1000多个字符,并且有多行。它所做的只是从一大块文本中分块,然后再单独处理这些部分以提取信息。我还希望这些部分标题能够自然语言兼容,这就是为什么一些部分可以以多种方式键入,从而增加正则表达式的大小。在性能和可管理性方面是否有更好的方法

使用词法分析器而不是正则表达式。

也许可以尝试类似于中讨论的语法分析器生成器

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

  • 为了处理此类regexp中的性能,可以使用前缀优化

  • 这个框架允许您使用JavaDSL编写类型检查的regexp。因此,它变得可重构和可维护


  • 我研究了ANTLR,在我看来,如果文本采用更结构化的格式,那就更好了。另一方面,我正在研究自然语言,它往往是非结构化的。人们经常忘记在语句中加标点符号,或者可能有多种表达相同内容的方法。给出的选项非常好,但我对如何使用它感到有点困惑。我上面发布的正则表达式不仅选择节标题,还选择节标题的内容。我如何使用GExp来实现这一点?@grrrr哦。。。我想我可以只使用生成的正则表达式两次就可以了。好的)正则表达式工具只允许您从字符串列表(或其他正则表达式)创建正则表达式。所以您可以将其传递给PAttern.compile,然后从Matcher中提取内容。有不生成caputed组的选项,所以您可以将其与其他regexp组合,并通过Matcher.group(number)获取字段。GExp是高级regexp,意味着首先编写lexer来创建令牌,然后在其上使用regexp,相关工具是gatejapehey,我正在尝试运行中给出的示例,您知道“match”和“seq”等方法来自哪里吗?这是一个静态导入还是一个继承的类。是的,有GraphUtils的静态导入。您可以在测试源代码中找到所有这些代码。