2016-11-07 66 views
1

我有一个字符串,可能会以;开始和/或结束。我想匹配并替换这些;字符串。以下正则表达式的作品,但我怎样才能让它更简单?正则表达式以字符串开始和/或结束 - 如何简化?

(?:^(;).*)(?:.*(;)$)|(?:^(;).*)|(?:.*(;)$) 

这使用结构AB | A | B(A和B或A或B)。

实施例的字符串:

  • ; foo ;bar;(2匹配)
  • foo ;bar;(1匹配)
  • ; foo ;bar(1匹配)
  • foo ;bar(0匹配)
+1

外部非捕获组只影响readabi lity。预计产量是多少,BTW?试试['^; \ s * |; \ s * $'](https://regex101.com/r/bxvKtd/1)。 –

+1

四种情况下,为什么不先处理所有开始,然后全部结束。然后你有两个独立的案例。 –

回答

1

注意非捕获组是为了对模式序列进行分组,如果你o没有量化群体,也没有在内部使用替代品,非捕获群体变得多余。所以,你的正则表达式看起来像没有这些组的^(;).*.*(;)$|^(;).*|.*(;)$,你很容易看到在第一个选择中有一个双重.*。将模式减少到^(;).*(;)$|^(;).*|.*(;)$可以看出,如果第一部分不匹配,第二部分或第三部分会在开始或结束后面找到一个空格,因此第一个替换看起来是多余的(除非需要拆分替换逻辑3例!)。

所以,如果你只是想更换比赛用1个替换模式,您可以只使用

^;\s*|;\s*$ 

regex demo

+1

完美。谢谢! –

相关问题