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

问题描述 投票:1回答:2

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

ex1:保加利亚[6]

我如何删除[6]并且只有保加利亚?

ex2:100 Haddon Ave,Westmont,NJ

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

r string
2个回答
2
投票

您正在寻找的是正则表达式,在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)。


1
投票

我们可以使用subbase R

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

sub(",.*", "", "100 Haddon Ave, Westmont, NJ")
#[1] "100 Haddon Ave"
© www.soinside.com 2019 - 2024. All rights reserved.