除非出现两次,否则如何匹配字符的任何出现?

How to match any occurrence of a character except if it occurs two times?

我正在尝试匹配术语末尾出现的任何加号,除非它恰好出现两次。例如c+c++++中的加号应该匹配,但是c++中的不是

天真的方法 \+{1}$|\+{3,}$ 显然行不通。你有什么更好的主意吗?

我喜欢在这里构建我的正则表达式:regex builder 看起来这个会抓取 c+,而不是 c++,以及带有 3 个或更多 + 符号的 c

(c\+{1}|(\+){3,})

您可以使用负先行的正则表达式:

\b\+(?:\+{2,})?(?!\+)

RegEx Demo

正则表达式分解:

  • \b - 声明一个字边界
  • \+ - 匹配文字 +
  • (?:\+{2,})? - 可选择匹配 2 个或更多 +
  • (?!\+) - 否定前瞻以确保前面没有 + 阻止 ++

^[^+]*(?:\+|[+]{3,})$ 将匹配您的人为示例以及您人为示例中 c 位置的任何内容。