我有几个文本字符串,在国家名称的末尾是[4]或[8]或[3] I.E.数字1-20
ex1:保加利亚[6]
我如何删除[6]并且只有保加利亚?
ex2:100 Haddon Ave,Westmont,NJ
如何删除逗号之后的所有信息才能获得100 Haddon Ave?
您正在寻找的是正则表达式,在R中实现,具有gsub
或我首选的stringr
包等功能。您提供的图案与您要保留的文本相匹配,至少与str_extract
相符。这里,第一个模式是".*(?=\\[\\d\\])"
,这意味着在.*
,数字和[
(]
)之前取任何字符(?=\\[\\d\\])
)。您需要使用\
来逃避某些特殊字符。第二个是类似的,说采取在,
之前的字符。在?
之后还有一个额外的.*
,因为这可以找到最短的匹配,否则你会得到100 Haddon Ave, Westmont
而不仅仅是100 Haddon Ave
。您可以选择匹配您不想保留的东西,并使用str_replace
将其替换为""
。这可以让你避免使用有时候很繁琐的外观((?=)
部分)。
我建议更深入地研究正则表达式,包括lookarounds。尝试用于数据科学的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创建于2018-03-06(v0.2.0)。
我们可以使用sub
的base R
sub("\\[\\d+\\]$", "", 'some words[6]')
#[1] "some words"
sub(",.*", "", "100 Haddon Ave, Westmont, NJ")
#[1] "100 Haddon Ave"