【问题标题】:R: strsplit on negative lookaroundR:负环视时的strsplit
【发布时间】:2019-07-14 09:47:19
【问题描述】:
假设我需要将caabacb 拆分为单个字母,除非一个字母后跟一个b,从而产生"c" "a" "ab" "a" "cb"。我尝试使用以下行,它在正则表达式测试器上看起来不错,但在 R 中不起作用。我做错了什么?
strsplit('caabacb','(?!b)',perl=TRUE)
[[1]]
[1] "c" "a" "a" "b" "a" "c" "b"
【问题讨论】:
标签:
r
regex-lookarounds
strsplit
【解决方案1】:
您还可以在匹配任何字符 (?<=.) 的后面添加前缀正向查找。正向后视 (?<=.) 将在每个字符处拆分字符串(不删除字符),但负向前瞻 (?!b) 不包括字符后跟 b 的拆分:
strsplit('caabacb', '(?<=.)(?!b)', perl = TRUE)
#> [[1]]
#> [1] "c" "a" "ab" "a" "cb"
【解决方案2】:
strsplit() 可能需要拆分一些东西。你可以插入例如";" 和 gsub()。
strsplit(gsub("(?!^.|b|\\b)", ";", "caabacb", perl=TRUE), ";", perl=TRUE)
# [[1]]
# [1] "c" "a" "ab" "a" "cb"