从字符串末尾删除多个非字母字符

标签 r regex string

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

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

在上面的例子中,我想把国家变成:

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

我可以将 gsub() 与字符特定模式(例如,pattern = ",$")一起使用,但我不太确定如何对字符串执行此操作具有多个不同的尾随非字母(例如,“Senegal1345769”)。

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

最佳答案

您对 [^: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 个或多个字母以外的字符
  • $ - 字符串结尾。

关于从字符串末尾删除多个非字母字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45016660/

相关文章:

javascript - 正则表达式拒绝连续字符

Java正则表达式字符串和空格之间的匹配

python - 什么都没有发生,甚至空间也没有发生

string - 检查字节序列是否包含utf-16

r - 如何按数字顺序对带整数的字符串进行排序?

regex - Perl 正则表达式的 'o' 修饰符是否仍然提供任何好处?

r - Flexdashboard 宽表滚动到侧栏

c - 在C中读取一行未知格式

r - 无法在 rstudio 中启动 pandoc

r - 如何在 R 中读取 .MAP 文件扩展名?