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

Regex 正则表达式以字符串开头和/或结尾-如何简化?,regex,Regex,我有一个字符串,可能以开头和/或结尾。我想匹配并替换这些字符串。下面的正则表达式可以工作,但如何使其更简单 (?:^(; ).*)(?:.*(; )$)|(?:^(; ).*)|(?:.*(; )$) 这使用结构AB | A | B(A和B,或A或B) 示例字符串: ;傅;酒吧(2个匹配项) foo;酒吧(1个匹配) ;傅;条形码(1个匹配项) foo;条形码(0个匹配项) 请注意,非捕获组意味着对模式序列进行分组,如果您不量化组,也不在组内使用替代方案,则非捕获组将变得多余。因此,在没有这

我有一个字符串,可能以
开头和/或结尾。我想匹配并替换这些
字符串。下面的正则表达式可以工作,但如何使其更简单

(?:^(; ).*)(?:.*(; )$)|(?:^(; ).*)|(?:.*(; )$)
这使用结构AB | A | B(A和B,或A或B)

示例字符串:

  • ;傅;酒吧(2个匹配项)
  • foo;酒吧(1个匹配)
  • ;傅;条形码(1个匹配项)
  • foo;条形码(0个匹配项)

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

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

^;\s*|;\s*$

请参阅

正则表达式代码

^\;|\;$

示例:

外部非捕获组仅影响可读性。顺便说一句,预计产量是多少?试试看。四种情况,为什么不先处理所有的开始,然后处理所有的结束。然后你有两个独立的案例。谢谢。但是,与上面的答案不同,这与空格不匹配。完美。非常感谢。