java - Java 正则表达式中强制最后一个单词和可选的前面单词/短语

标签 java regex

我在使用 Java 中的以下正则表达式时遇到问题。我删除了双引号,以使其更具可读性。由于缺乏更好的词,我还将每个“组件”放在单独的行上(但实际的表达式会将行合并,行之间没有空格):

(?:\bIN(?:\s*,)?)?
(?:\bVOL.?(?:U[NM]TARY)?)?(?:\s*,)? \b(?:LIQ'N|LIQ|LQD|LIQD|LIQN|LIQUIDA|LIQUIDATION|REC|RECEIVERSHIP|RECSHIP|WINDING UP)\b

本质上,最后一个单词/表达式是强制性的,但前面的单词 IN 和 VOLUNTARY (或其某些版本)是可选的。以下是我希望此模式匹配的一些字符串示例:

IN VOLUNTARY LIQUIDATION
IN VOL LIQ
IN VOL.LIQ
IN LIQUIDATION
IN LIQ
VOL LIQ
VOL.LIQ
VOL. LIQ
IN     LIQ
IN      VOL      LIQUIDATION
IN LIQUIDATION
IN LIQ
IN, VOL. LIQ
IN VOLUMTARY, LIQN
LIQUIDATION
RECEIVERSHIP

这些短语将被混合到字符串中,我需要将它们删除。这些短语通常用 []( and ) 括起来,但这并不确定,这就是我使用单词边界标记的原因。

我无法检测前面的单词,仅匹配最后一个单词。请注意,正则表达式的性能并不是我主要关心的问题(即,如果有必要,这将是一个可能需要时间的后台进程)。任何正则表达式专家都可以帮我解决这个问题吗?

最佳答案

使用 regex101 调试器可以看到序列 \s*, 失败,也许您想要 [\s,]*:替换 (?:\s*|,)?[\s,]*

original regex

the functionning regex

关于java - Java 正则表达式中强制最后一个单词和可选的前面单词/短语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48463621/

相关文章:

java - Spring mvc-来自数据库的下拉框选项

Java做while循环不循环

java - 如何使用apache POI库按列名获取Excel工作表单元格数据

java - 如何在 JFrame 中居中对齐标题?

regex - 如何在 NXLog 中使用 RegEx 对多行 XML 进行模式化

MySQL 删除 %startcode%endcode% 处的文本

C# 正则表达式 : How to break up plain text string

java.lang.ClassNotFoundException : org. apache.xmlbeans.XmlException 异常

php - 具有特殊字符的名称的正则表达式 (Unicode)

javascript - 正则表达式电子邮件验证 Python 到 Javascript