我有几个文本字符串,在国家名称的末尾是[4]或[8]或[3] I.E.数字1-20
ex1:保加利亚[6]
我如何删除[6]而只是保加利亚?
ex2:新泽西州Westmont的100 Haddon Ave
如何删除逗号之后的所有信息才能获得100 Haddon Ave?
答案 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"