这是一个基本问题,因为我对RegEx不是很熟悉,但我在网上找不到答案(可能是我不知道谷歌要做什么)。
我想编写一个函数来查找所有逗号:
我想出了两个实例的单个正则表达式
(?!\\])(\\,)(?!\\s\\[)
和
(\\,)(?!\\+)
(如我错了请纠正我)
但是如何将两者放在一个命令中,以便我的函数能识别满足这两个条件的所有逗号?我在缠绕它时遇到一些困难,因为它们是两个负面条件。如果它有任何区别,我正在使用R.
谢谢!
您可以使用具有基本R正则表达式函数的PCRE正则表达式:
][^[]*\[(*SKIP)(*F)|,(?!\+)
细节
][^[]*\[(*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"
)。
这应该这样做:
(?!)