如何按特定交替序列拆分R语言中的字符串?
R语言实现「2个字符、1个字符交替」的动态字符串拆分
要实现按「先2个字符、再1个字符、循环交替」的规则拆分字符串,且无需预先统计字符长度,可以利用PCRE正则的正向零宽断言,结合位置匹配来动态识别拆分点。
实现代码
strsplit("ABCDEFG", "(?<=..)(?=(.)|$)|(?<=.(?=(..)|$))", perl = TRUE)
运行结果
执行后会得到期望的输出:
[[1]] [1] "AB" "C" "DE" "F" "G"
正则逻辑说明
(?<=..)(?=(.)|$):匹配两个字符末尾的位置,且该位置后至少还有1个字符(或到字符串结尾),用于拆分出"AB""DE"这类双字符片段(?<=.(?=(..)|$)):匹配单个字符末尾的位置,且该位置后至少还有2个字符(或到结尾),用于拆分出"C""F"这类单字符片段
两个规则组合后,会自动按「2个→1个→2个→1个」的循环模式遍历字符串,剩余的不足规则长度的字符(如最后的"G")也能被正确保留。
等价写法
也可以用另一种正则表达式实现相同效果:
strsplit("ABCDEFG", "(?<=(?:..)(?:.(..))*)|(?<=(?:.(..))*.)", perl = TRUE)
内容的提问来源于stack exchange,提问作者AnilGoyal
相关产品推荐
相关产品推荐

