从字符串

时间:2017-07-10 15:58:14

标签: r regex string

我正在对数据框列中的一系列单个名称进行一些数据清理。我想删除每个名称末尾的非字母字符。

countries <- c("Senegal1345769", "Canada&", "Austria12", "Spain-", "Russia#$")

在上述情况中,我希望将国家/地区变为:

[1] "Senegal"   "Canada"   "Austria" "Spain"    "Russia"

我可以将gsub()用于特定字符的模式(例如,pattern = ",$"),但我不太确定如何为具有多个变化的尾随非alpha的字符串执行此操作(例如, "Senegal1345769")。

将使用什么样的模式来解决这个问题?

1 个答案:

答案 0 :(得分:1)

您对[^:alpha:]+$的初步尝试几乎是正确的。您只需要记住,POSIX字符类(如[:alpha:])应该在括号表达式中使用。

使用

countries <- c("Senegal1345769", "Canada&", "Austria12", "Spain-", "Russia#$")
sub("[^[:alpha:]]+$", "", countries)
## => [1] "Senegal" "Canada"  "Austria" "Spain"   "Russia" 

请参阅online R demo

<强>详情:

  • [^ - 否定括号表达式的开头
    • [:alpha:] - 字母POSIX字符类......
  • ]+ - 一次或多次
  • $ - 字符串结束。

因此,[^[:alpha:]]+$模式匹配字符串末尾的字母以外的1个或多个字符。

如果此表达式无效,您也可以尝试PCRE模式:

sub("(*UCP)\\P{L}+$", "", countries, perl=TRUE)

请参阅another online R demo

在这里,

  • (*UCP) - 使模式识别Unicode
  • \\P{L}+ - 除字母以外的1个或多个字符
  • $ - 字符串结束。