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

问题描述 投票:1回答:2

这是一个基本问题,因为我对RegEx不是很熟悉,但我在网上找不到答案(可能是我不知道谷歌要做什么)。

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

  • 不在“]”和“[”之间(如[abc],[def])
  • 没有后跟“+”(如abc,+ def)

我想出了两个实例的单个正则表达式

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

(\\,)(?!\\+)

(如我错了请纠正我)

但是如何将两者放在一个命令中,以便我的函数能识别满足这两个条件的所有逗号?我在缠绕它时遇到一些困难,因为它们是两个负面条件。如果它有任何区别,我正在使用R.

谢谢!

r regex regex-lookarounds lookaround
2个回答
1
投票

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

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

regex demo

细节

  • qazxsw poi - 匹配并跳过qazxsw poi,然后是除了][^[]*\[(*SKIP)(*F)之外的0+字符,然后是](即[规则)
  • [ - 或匹配
  • not between a "]" and a " [" - 一个逗号,没有立即跟随文字|标志

,(?!\+)

+

0
投票

所以你想要的逗号是:

  • 之前没有]
  • 没有后跟+或[

对于第二个,您可以使用负向前瞻(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" )。

这应该这样做:

(?!)
© www.soinside.com 2019 - 2024. All rights reserved.