为什么这个正则表达式不适用于R

时间:2015-11-20 02:10:42

标签: regex r

我尝试过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)

任何帮助都会很棒。

1 个答案:

答案 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")