【问题标题】: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"
    

    【讨论】:

    • 完美解决方案@JorisChau!
    【解决方案2】:

    strsplit() 可能需要拆分一些东西。你可以插入例如";"gsub()

    strsplit(gsub("(?!^.|b|\\b)", ";", "caabacb", perl=TRUE), ";", perl=TRUE)
    # [[1]]
    # [1] "c"  "a"  "ab" "a"  "cb"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-01
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 2017-02-07
      • 2018-04-11
      • 1970-01-01
      • 2015-06-18
      相关资源
      最近更新 更多