当正则表达式的某些部分要保存在后续的分割字符串中时,如何使用正则表达式在R中拆分字符串?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当正则表达式的某些部分要保存在后续的分割字符串中时,如何使用正则表达式在R中拆分字符串?相关的知识,希望对你有一定的参考价值。

我有一个像x = c("ABC", "ABC, EF", "ABC, DEF, 2 stems", "DE, other comments, and stuff")这样的字符串向量。

我想将其中的每一个分成两个部分:1)大写字母集(2或3个字母,用逗号分隔),2)最后一个“[A-Z] [A-Z]”之后的所有内容。

结果应该是

 [[1]]
[1] "ABC"

[[2]]
[1] "ABC, EF"

[[3]]
[1] "ABC, DEF"      "2 stems"

[[4]]
[1] "DE"  "other comments, and stuff"

我尝试了strsplit(x, "[A-Z][A-Z], [a-z0-9]")strsplit(x, "(?:[A-Z][A-Z], )[a-z0-9]"),两者都归还了

[[1]]
[1] "ABC"

[[2]]
[1] "ABC, EF"

[[3]]
[1] "ABC, D"      " stems"

[[4]]
[1] ""                        "ther comments, and stuff"

识别拆分的位置取决于第一个子串的结尾和第二个子串的开头的组合,因此这些部件将从最终结果中排除。

如上所述,在拆分时可以获得任何帮助,同时在每个子串中包含拆分正则表达式的相关部分!

答案

一种选择是str_split

library(stringr)
str_split(x, ", (?=[a-z0-9])", n = 2)
#[[1]]
#[1] "ABC"

#[[2]]
#[1] "ABC, EF"

#[[3]]
#[1] "ABC, DEF" "2 stems" 

#[[4]]
#[1] "DE"                        "other comments, and stuff"

以上是关于当正则表达式的某些部分要保存在后续的分割字符串中时,如何使用正则表达式在R中拆分字符串?的主要内容,如果未能解决你的问题,请参考以下文章

R中的正则表达式及字符处理函数总结

如何分割(split)string字符串

正则表达式

正则表达式以python分割文本文件

如何编写正则表达式以仅返回此字符串的某些部分?

用于匹配 JSON 子字符串某些部分的 Java 正则表达式