正则表达式 - 满足两个(否定)条件的所有逗号

Regex - all commas that satisfy two (negative) conditions

这是一个基本问题,因为我对 RegEx 不是很熟悉,但我无法在网上找到答案(可能是我不知道 google 有什么用)。

我想编写一个函数来查找所有逗号:

我发现这两个实例各自的正则表达式是

(?!\])(\,)(?!\s\[)

(\,)(?!\+)

(如有错误请指正)

但是我如何将两者放在一个命令中,以便我的函数能够识别满足这两个条件的所有逗号?我也很难理解它,因为它们是两个负面条件。 如果有什么不同,我正在使用 R.

谢谢!

所以你想要的逗号是:

  • 前面没有 ]
  • 后面没有 + 或 [

对于第二个,您可以使用负前瞻 ((?!))。对于第一个,你会想要它的反面,即负面回顾((?<!))。

应该这样做:

,(?<!\])(?!\+|\[)

您可以使用带有基本 R 正则表达式函数的 PCRE 正则表达式:

][^[]*\[(*SKIP)(*F)|,(?!\+)

参见regex demo

详情

  • ][^[]*\[(*SKIP)(*F) - 匹配并跳过 ],然后是 [ 以外的 0+ 个字符,然后是 [(即 not between a "]" and a " [" 规则)
  • | - 或匹配
  • ,(?!\+) - 逗号后面没有紧跟文字 + 符号

R online demo:

x <- "[abc], [def] abc,+def abc,def"
reg <- "][^[]*\[(*SKIP)(*F)|,(?!\+)"
strsplit(x, reg, perl=TRUE)
## [[1]]
## [1] "[abc], [def] abc,+def abc" "def"
gsub(reg, "@", x, perl=TRUE)
## [1] "[abc], [def] abc,+def abc@def"