我有一个可能以;
开头和/或结尾的字符串。我想匹配并替换这些;
字符串。以下正则表达式有效,但我怎样才能使它更简单?
(?:^(; ).*)(?:.*(; )$)|(?:^(; ).*)|(?:.*(; )$)
这使用结构AB | A | B(A和B,或A或B)。
示例字符串:
; foo ;bar;
(2场比赛)foo ;bar;
(1场比赛); foo ;bar
(1场比赛)foo ;bar
(0匹配)答案 0 :(得分:1)
请注意,非捕获组旨在对模式序列进行分组,如果您不对组进行量化,也不在内部使用替代方法,则非捕获组将变得多余。因此,如果没有这些组,你的正则表达式看起来就像^(; ).*.*(; )$|^(; ).*|.*(; )$
,你很容易看到第一个替代版中有一个双.*
。将模式缩减为^(; ).*(; )$|^(; ).*|.*(; )$
您可以看到,如果第一部分不匹配,则第二部分或第三部分将在开始或结束时找到;
后跟空格,因此第一部分看起来多余(除非您需要拆分3个案例的替换逻辑!)。
因此,如果你只想用1替换模式替换匹配,你可以使用
^;\s*|;\s*$
请参阅regex demo
答案 1 :(得分:0)