如何在R语言中按连续相同字母分割字符串

3

I have a string like this:

s <- "aaehhhhhhhaannd"

我该如何使用R将字符串拆分为以下格式?
c("aa", "e", "hhhhhhh", "aa","nn","d") 
2个回答

3
你可以使用 str_extract_all 函数,正则表达式为 (.)\\1*,它使用反向引用来匹配重复字符:
library(stringr)
str_extract_all("aaehhhhhhhaannd", "(.)\\1*")
#[[1]]
#[1] "aa"      "e"       "hhhhhhh" "aa"      "nn"      "d"

3
你可以使用基本的R strsplit和基于环视的PCRE正则表达式。
s <- "aaehhhhhhhaannd"
strsplit(s, "(?<=(.))(?!\\1)", perl=TRUE)
# [[1]]
# [1] "aa"      "e"       "hhhhhhh" "aa"      "nn"      "d"      

请查看在线R演示正则表达式演示

正则表达式细节

  • (?<=(.)) - 一个正向后瞻((?<=...))会“查看”左侧,并使用(.) 捕获组将任何字符捕获到第1组中(可以通过\1 反向引用在模式内引用此值)
  • (?!\\1) - 一个负向前瞻,如果当前位置右侧有与第1组中捕获的相同值,则匹配失败。

由于前后瞻不消耗文本,因此分割发生在不同字符之间的位置。

注意:如果你希望.匹配换行符,需要在模式开头加上(?s)(与PCRE正则表达式类似,默认情况下.不会匹配换行符)。


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