正则表达式以字符串开头和/或结束 - 如何简化?

时间:2016-11-07 12:09:45

标签: regex

我有一个可能以;开头和/或结尾的字符串。我想匹配并替换这些;字符串。以下正则表达式有效,但我怎样才能使它更简单?

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

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

示例字符串:

  • ; foo ;bar;(2场比赛)
  • foo ;bar;(1场比赛)
  • ; foo ;bar(1场比赛)
  • foo ;bar(0匹配)

2 个答案:

答案 0 :(得分:1)

请注意,非捕获组旨在对模式序列进行分组,如果您不对组进行量化,也不在内部使用替代方法,则非捕获组将变得多余。因此,如果没有这些组,你的正则表达式看起来就像^(; ).*.*(; )$|^(; ).*|.*(; )$,你很容易看到第一个替代版中有一个双.*。将模式缩减为^(; ).*(; )$|^(; ).*|.*(; )$您可以看到,如果第一部分不匹配,则第二部分或第三部分将在开始或结束时找到;后跟空格,因此第一部分看起来多余(除非您需要拆分3个案例的替换逻辑!)。

因此,如果你只想用1替换模式替换匹配,你可以使用

^;\s*|;\s*$

请参阅regex demo

答案 1 :(得分:0)

正则表达式代码

^\;|\;$

示例:https://regex101.com/r/C9ZnWJ/2