正则表达式 - 满足两个(否定)条件的所有逗号
Regex - all commas that satisfy two (negative) conditions
这是一个基本问题,因为我对 RegEx 不是很熟悉,但我无法在网上找到答案(可能是我不知道 google 有什么用)。
我想编写一个函数来查找所有逗号:
- 不在“]”和“[”之间(如 [abc]、[def])
- 后面没有“+”(如 abc,+def)
我发现这两个实例各自的正则表达式是
(?!\])(\,)(?!\s\[)
和
(\,)(?!\+)
(如有错误请指正)
但是我如何将两者放在一个命令中,以便我的函数能够识别满足这两个条件的所有逗号?我也很难理解它,因为它们是两个负面条件。
如果有什么不同,我正在使用 R.
谢谢!
所以你想要的逗号是:
- 前面没有 ]
- 后面没有 + 或 [
对于第二个,您可以使用负前瞻 ((?!)
)。对于第一个,你会想要它的反面,即负面回顾((?<!)
)。
应该这样做:
,(?<!\])(?!\+|\[)
您可以使用带有基本 R 正则表达式函数的 PCRE 正则表达式:
][^[]*\[(*SKIP)(*F)|,(?!\+)
参见regex demo。
详情
][^[]*\[(*SKIP)(*F)
- 匹配并跳过 ]
,然后是 [
以外的 0+ 个字符,然后是 [
(即 not between a "]" and a " ["
规则)
|
- 或匹配
,(?!\+)
- 逗号后面没有紧跟文字 +
符号
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"
这是一个基本问题,因为我对 RegEx 不是很熟悉,但我无法在网上找到答案(可能是我不知道 google 有什么用)。
我想编写一个函数来查找所有逗号:
- 不在“]”和“[”之间(如 [abc]、[def])
- 后面没有“+”(如 abc,+def)
我发现这两个实例各自的正则表达式是
(?!\])(\,)(?!\s\[)
和
(\,)(?!\+)
(如有错误请指正)
但是我如何将两者放在一个命令中,以便我的函数能够识别满足这两个条件的所有逗号?我也很难理解它,因为它们是两个负面条件。 如果有什么不同,我正在使用 R.
谢谢!
所以你想要的逗号是:
- 前面没有 ]
- 后面没有 + 或 [
对于第二个,您可以使用负前瞻 ((?!)
)。对于第一个,你会想要它的反面,即负面回顾((?<!)
)。
应该这样做:
,(?<!\])(?!\+|\[)
您可以使用带有基本 R 正则表达式函数的 PCRE 正则表达式:
][^[]*\[(*SKIP)(*F)|,(?!\+)
参见regex demo。
详情
][^[]*\[(*SKIP)(*F)
- 匹配并跳过]
,然后是[
以外的 0+ 个字符,然后是[
(即not between a "]" and a " ["
规则)|
- 或匹配,(?!\+)
- 逗号后面没有紧跟文字+
符号
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"