在R语言中如何将字符串按最后一个逗号分割?

15

我对R并不陌生,但对正则表达式相对较新。

类似的问题可以在这里找到,但它要求在第一个逗号处拆分而不是最后一个。

举个例子,如果我使用

> lastcomma_strsplit("UK, USA, Germany", ", ")
[[1]]
[1] "UK"      "USA"     "Germany"

我想获取

[[1]]
[1] "UK, USA"     "Germany"

如果我使用

> lastcomma_strsplit("London, Washington, D.C., Berlin", ", ")
[[1]]
[1] "London"     "Washington" "D.C."       "Berlin"  

我想要获取

[[1]]
[1] "London, Washington, D.C."       "Berlin"  

我认为一个可行的方法是将最后一个逗号替换成其他符号,例如

$, #, *, ...
然后使用。
strsplit() 

如果您替换的内容是唯一的,可以通过该字符来拆分字符串(请确保它是唯一的!),但如果您能直接使用一些内置函数来解决问题,我会更加满意。

那么我该怎么做呢?

2个回答

20

以下是一种方法:

strsplit("UK, USA, Germany", ",(?=[^,]+$)", perl=TRUE)

## [[1]]
## [1] "UK, USA" " Germany"

您可能需要:

strsplit("UK, USA, Germany", ",\\s*(?=[^,]+$)", perl=TRUE)

## [[1]]
## [1] "UK, USA" "Germany"

如果逗号后没有空格,它将匹配:

strsplit(c("UK, USA, Germany", "UK, USA,Germany"), ",\\s*(?=[^,]+$)", perl=TRUE)

## [[1]]
## [1] "UK, USA" "Germany"
## 
## [[2]]
## [1] "UK, USA" "Germany"

谢谢,这样可以,但是你没有去掉第二个逗号...最好还是把第二个逗号去掉。 - Jiqing Huang
非常感谢你,伙计!有没有关于在R中学习正则表达式基础的建议或网站? - Jiqing Huang
1
两个地方:我在SO和http://www.regular-expressions.info/rlanguage.html上学到了很多。 - Tyler Rinker

8
您可以使用 stringi 包中的 stri_split 函数。
x <- "USA,UK,Poland"
stri_split_fixed(x,",") # standard split by comma
[[1]]
[1] "USA"    "UK"     "Poland"

stri_split_fixed(x,",",n = 2) # set the max number of elements
[[1]]
[1] "USA"       "UK,Poland"

很不幸的是,没有参数可以改变分割的起始点(从开始/结束),但我们可以用另一种方式处理 - 使用 stri_reverse

stri_split_fixed(stri_reverse(x),",",n = 2) #reverse
[[1]]
[1] "dnaloP" "KU,ASU"

stri_reverse(stri_split_fixed(stri_reverse(x),",",n = 2)[[1]]) #reverse back
[1] "Poland" "USA,UK"
stri_reverse(stri_split_fixed(stri_reverse(x),",",n = 2)[[1]])[2:1] #and again :)
[1] "USA,UK" "Poland"

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