我有一个字符串,可能会以;
开始和/或结束。我想匹配并替换这些;
字符串。以下正则表达式的作品,但我怎样才能让它更简单?正则表达式以字符串开始和/或结束 - 如何简化?
(?:^(;).*)(?:.*(;)$)|(?:^(;).*)|(?:.*(;)$)
这使用结构AB | A | B(A和B或A或B)。
实施例的字符串:
; foo ;bar;
(2匹配)foo ;bar;
(1匹配); foo ;bar
(1匹配)foo ;bar
(0匹配)
我有一个字符串,可能会以;
开始和/或结束。我想匹配并替换这些;
字符串。以下正则表达式的作品,但我怎样才能让它更简单?正则表达式以字符串开始和/或结束 - 如何简化?
(?:^(;).*)(?:.*(;)$)|(?:^(;).*)|(?:.*(;)$)
这使用结构AB | A | B(A和B或A或B)。
实施例的字符串:
; foo ;bar;
(2匹配)foo ;bar;
(1匹配); foo ;bar
(1匹配)foo ;bar
(0匹配)注意非捕获组是为了对模式序列进行分组,如果你o没有量化群体,也没有在内部使用替代品,非捕获群体变得多余。所以,你的正则表达式看起来像没有这些组的^(;).*.*(;)$|^(;).*|.*(;)$
,你很容易看到在第一个选择中有一个双重.*
。将模式减少到^(;).*(;)$|^(;).*|.*(;)$
可以看出,如果第一部分不匹配,第二部分或第三部分会在开始或结束后面找到一个空格,因此第一个替换看起来是多余的(除非需要拆分替换逻辑3例!)。
所以,如果你只是想更换比赛用1个替换模式,您可以只使用
^;\s*|;\s*$
完美。谢谢! –
外部非捕获组只影响readabi lity。预计产量是多少,BTW?试试['^; \ s * |; \ s * $'](https://regex101.com/r/bxvKtd/1)。 –
四种情况下,为什么不先处理所有开始,然后全部结束。然后你有两个独立的案例。 –