在逗号后拆分字符串但不包含尾随空格

3
正如标题所述,我想要拆分这个字符串。
strsplit(c("aaa,aaa", "bbb, bbb", "ddd , ddd"), ",")

为此,需要做一些准备工作。
[[1]]
[1] "aaa" "aaa"

[[2]]
[1] "bbb, bbb"

[[3]]
[1] "ddd , ddd"

因此,正则表达式必须考虑在逗号后面不应该出现任何空格。可能是重复的问题,但我无法通过谷歌找到解决方案。

2
该模式已经发布在:https://stackoverflow.com/questions/19480101/regex-for-split-a-string-with-comma-ignoring-comma-with-a-space - undefined
@WiktorStribiżew 只有一次?那就不是重复了 ;) - undefined
由于R中的正则表达式用法与Java中的正则表达式用法相当不同,我同意这一点。 - undefined
2个回答

5
使用负向先行断言:

正则表达式必须考虑在逗号后面不应出现任何空格

使用负向先行断言:

> strsplit(c("aaa,aaa", "bbb, bbb", "ddd , ddd"), ",(?!\\s)", perl = TRUE)
[[1]]
[1] "aaa" "aaa"

[[2]]
[1] "bbb, bbb"

[[3]]
[1] "ddd , ddd"

,(除非其后面有一个空格)仅匹配,


还有没有使用 perl = FALSE 的解决方案? - undefined
@Jimbou 为什么你问这个问题?你在用什么操作系统? - undefined
@WiktorStribiżew 大致上是出于好奇,我正在使用tidyrseparate_rows函数中的模式。幸运的是,它按预期工作。 - undefined
1
@Jimbou 我看到 separate_rows 函数依赖于 stringi 包来进行拆分,所以支持 lookaheads 的 ICU 正则表达式库并不令人意外。 - undefined

0

只是提供一个使用(*SKIP)(*FAIL)的替代方案:

pattern <- " , (*SKIP)(*FAIL)|,"
data <- c("aaa,aaa", "bbb, bbb", "ddd , ddd")
strsplit(data, pattern, perl = T)

这将产生与上述相同的结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接