如何删除r中文本字符串末尾中间的文本和符号?

时间:2018-03-06 18:13:48

标签: r string

我有几个文本字符串,在国家名称的末尾是[4]或[8]或[3] I.E.数字1-20

ex1:保加利亚[6]

我如何删除[6]而只是保加利亚?

ex2:新泽西州Westmont的100 Haddon Ave

如何删除逗号之后的所有信息才能获得100 Haddon Ave?

2 个答案:

答案 0 :(得分:2)

您正在寻找的是正则表达式,在R中使用gsub或我首选的stringr包等函数实现。您提供的模式与您要保留的文本相匹配,至少与str_extract匹配。在这里,第一个模式是".*(?=\\[\\d\\])",这意味着取.*之前的任何字符([),数字和]?=\\[\\d\\]))。您需要使用\来转义某些特殊字符。第二个是类似的,说取在,之前的字符。在?之后还有一个额外的.*,因为这可以找到最短的匹配,否则您将获得100 Haddon Ave, Westmont而不是100 Haddon Ave。您也可以匹配想要保留的内容,并使用str_replace将其替换为""。这样可以避免使用有时候很繁琐的外观((?=)部分)。

我建议更深入地研究正则表达式,包括外观。尝试使用R的strings chapter数据科学或RStudio字符串cheatsheet

library(stringr)
str_extract("Bulgaria[6]", ".*(?=\\[\\d\\])")
#> [1] "Bulgaria"
str_extract("100 Haddon Ave, Westmont, NJ", ".*?(?=,)")
#> [1] "100 Haddon Ave"
# Alternatively, avoid having to use lookarounds:
str_replace("Bulgaria[6]", "\\[\\d\\]", "")
#> [1] "Bulgaria"
str_replace("100 Haddon Ave, Westmont, NJ", ",.*$", "")
#> [1] "100 Haddon Ave"

reprex package(v0.2.0)创建于2018-03-06。

答案 1 :(得分:1)

我们可以使用sub

中的base R
sub("\\[\\d+\\]$", "", 'some words[6]')
#[1] "some words"

sub(",.*", "", "100 Haddon Ave, Westmont, NJ")
#[1] "100 Haddon Ave"