我在使用Java中的以下正则表达式时遇到麻烦。我删除了加倍的引号,以使其更具可读性。由于缺少更好的词,我也将每个“组件”放在单独的行上(但实际的表达方式是将行合并在一起,行之间没有空格):
(?:\ bIN(?:\ s *,)?)
(?:\ bVOL.?(?:U[NM]TARY)?)?(?:\s*,)?
\ b(?:LIQ'N | LIQ | LQD | LIQD | LIQN | LIQUIDA |清算| REC |收据|收据|清盘)\ b
本质上,最后一个单词/表达式是强制性的,但是前面的单词IN和VOLUNTARY(或其某些版本)是可选的。这是我希望此模式匹配的一些字符串示例:
自愿清盘
VOL LIQ
成交量
液化
IN LIQ
VOL LIQ
音量
卷生活质量
IN LIQ
IN VOL液化
液化
IN LIQ
IN,VOL。生活质量
立陶宛
液化
收货人
这些短语将混合成字符串,我需要将其删除。这些短语通常将用[
和]
或(
和)
括起来,但这并不是确定的,这就是为什么我使用单词边界标记。
我在检测前面的单词时遇到问题,只有最后一个单词被匹配。请注意,正则表达式的性能对我而言并不是主要的问题(即,如果需要的话,这将是一个后台过程,可能需要一些时间)。任何正则表达式专家都可以帮助我吗?
最佳答案
使用regex101调试器,您可以看到序列\s*,
失败,也许您想要的是[\s,]*
:用(?:\s*|,)?
替换[\s,]*
。
original regex
the functionning regex