strsplit返回带有正则表达式的空字符串

时间:2015-06-22 13:29:18

标签: regex r

在R中,我有一个变量作者,其值为“(Bernoulli)Cuatrec。”

我想只有名字,所以我使用以下正则表达式:

L <- strsplit(Author,"[()]")

但是这给了我3个字符串作为结果:

""          "Bernoulli" "Cuatrec."

我怎样才能只有两个名字,而不是空字符串?

PS:我的实际正则表达式更复杂,这里简化了。

3 个答案:

答案 0 :(得分:2)

在以下解决方案中,将rmCharssplitChars(针对第一个解决方案)和chars(针对第二个解决方案)设置为表示您需要使用的实际字符集的模式。根据您的单词和非单词,您可以使用内置类,例如chars <- "\\W",将chars设置为所有非单词字符。

1)删除(首先然后拆分)。假设s是输入字符串:

rmChars <- "[(]"
splitChars <- "[)]"
strsplit(gsub(rmChars, "", s), splitChars)[[1]]

,并提供:

[1] "Bernoulli" "Cuatrec." 

2)另一种可能性是用空格替换chars中的每个字符,修剪末尾然后分割空格。

chars <- "[()]"
strsplit(trimws(gsub(chars, " ", s)), " ")[[1]]

,并提供:

[1] "Bernoulli" "Cuatrec." 

答案 1 :(得分:0)

我通常倾向于尽可能避免安装新库。因此,我可以做到:

->rowCount();

我认为无需图书馆就可以找到解决方案。

答案 2 :(得分:0)

如果您的数据始终采用相同的模式,则可以使用:

strsplit(Author,"[[:punct:]]")[[1]][-1]
[1] "Bernoulli" "Cuatrec"  

当然,如果模式不规则,我的解决方案就没用了。