regex 从字符串中删除最后一个单词

rggaifut  于 2023-05-08  发布在  其他
关注(0)|答案(3)|浏览(169)

我想做点什么,但想不起来/找不到答案。我有一个来自人口普查局的城市名称列表,他们把城市的类型放在最后,这把我的match()搞乱了。
我想这样做:

Middletown Township
Sunny Valley Borough
Hillside Village

变成这样:

Middletown
Sunny Valley
Hillside

有什么建议吗?理想情况下,我还想知道R中是否有lastIndexOf()函数。
数据如下:

df1 <- data.frame(
  id = c(1, 2, 3),
  city = factor(c("Middletown Township", "Sunny Valley Borough", "Hillside Village"))
)
ozxc1zmp

ozxc1zmp1#

这将工作:

gsub("\\s*\\w*$", "", df1$city)
[1] "Middletown"   "Sunny Valley" "Hillside"

它删除由一个或多个空格字符组成的任何子字符串,后跟任意数量的“单词”字符(空格、数字或下划线),后跟字符串的结尾。

w51jfk4q

w51jfk4q2#

下面是一个regexp,它可以满足您的需求:

sub(df1$city, pattern = " [[:alpha:]]*$", replacement = "")

[1]《米德尔敦》《阳光谷》《希尔赛德》
这是用一个空字符串替换一个以空格开头,然后只包含字母直到字符串结尾的子字符串。

yzuktlbb

yzuktlbb3#

我会在stringr包中使用word(),如下所示:

df1 %>% mutate(city = word(city , 1  , -2))

第一个参数(1)表示从第一个单词开始,第二个参数(-2)表示将所有内容保留到倒数第二个单词。

相关问题