我尝试过grep,grepl,regexpr,gregexpr以及所有返回失败或非整数。
Ojbect是“test”,它是一个带地址的字符串。提供的示例:
[9972] "1350 Hwy 160 W\nFort Mill, SC 29715"
[9973] "Sonoran Desert Dentistry\n9220 E Raintree Dr\nSte 102\nScottsdale, AZ 85260"
[9974] "3252 Vilas Rd\nCottage Grove, WI 53527"
[9975] "224 W Cottage Grove Rd\nCottage Grove, WI 53527"
[9976] "320 W Cottage Grove Rd\nCottage Grove, WI 53527"
[9977] "7914 State Road 19\nDane, WI 53529"
[9978] "106 Dane St\nDane, WI 53529"
目标是在最后一个“\ n”之后提取所有内容,这样只需通过邮政编码保留城市。比如“Cottage Grove,WI 53527”
以下是不起作用的grep和regex的示例:
> grep("\\[^\\]+$", test)
integer(0)
任何帮助都会很棒。
答案 0 :(得分:7)
grep()
不会改变文字。它只找到它并返回匹配索引或匹配本身。要更改匹配的文字,您需要使用sub()
或gsub()
。在这种情况下,sub()
是合适的,因为您希望在每个字符串中删除最后一次换行符之前的所有内容。以下应该这样做。
sub(".*\n", "", test)
# [1] "Fort Mill, SC 29715" "Scottsdale, AZ 85260"
# [3] "Cottage Grove, WI 53527" "Cottage Grove, WI 53527"
# [5] "Cottage Grove, WI 53527" "Dane, WI 53529"
# [7] "Dane, WI 53529"
.*
贪婪,匹配任何内容\n
正是我们正在寻找的由于.*
贪婪,这将删除所有内容,包括最后一个\n
。
数据:强>
test <- c("1350 Hwy 160 W\nFort Mill, SC 29715", "Sonoran Desert Dentistry\n9220 E Raintree Dr\nSte 102\nScottsdale, AZ 85260",
"3252 Vilas Rd\nCottage Grove, WI 53527", "224 W Cottage Grove Rd\nCottage Grove, WI 53527",
"320 W Cottage Grove Rd\nCottage Grove, WI 53527", "7914 State Road 19\nDane, WI 53529",
"106 Dane St\nDane, WI 53529")