Java正则表达式

时间:2018-01-26 14:42:25

标签: 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 VOL LIQ
  IN VOL.LIQ
  在液体中   在LIQ中   VOL LIQ
  VOL.LIQ
  VOL。 LIQ
  IN LIQ
  IN VOL清算
  在液体中   在LIQ中   IN,VOL。 LIQ
  在体积,LIQN
  清算
  接管

这些短语将被混合成字符串,我需要删除它们。这些短语通常会附加[](),但这并不确定,这就是我使用单词边界标记的原因。< / p>

我在检测前面的单词时遇到问题,只有最后一个单词匹配。请注意,正则表达式的性能不是我的主要关注点(即,如果需要,这将是一个可以花费时间的后台进程)。任何正则表达式大师都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

使用regex101调试器可以看到序列\s*,失败,您可能希望[\s,]*:将(?:\s*|,)?替换为[\s,]*

original regex

the functionning regex