R - 正则表达式,grep打印出所有内容

时间:2016-12-10 21:26:54

标签: r regex

我有这个:

"81 Delaware St, Staten Island, NY 10304, USA"

我想抓拍81 Delaware St,

运行

grep("^.+?,", "81 Delaware St, Staten Island, NY 10304, USA", value= TRUE) 

返回:

81 Delaware St, Staten Island, NY 10304, USA

我尝试了perl=TRUE没有任何帮助,但仍然打印出所有内容。

示例:RegEx,所以我知道表达式没有错。

2 个答案:

答案 0 :(得分:1)

您对结果感到困惑,因为您的正则表达式实际上匹配您传递给grep的字符串,而grep只返回找到匹配项的所有字符向量。 grep不会返回子字符串

您可以使用sub ,.*正则表达式匹配,及其后的所有字符,并删除该部分,只留下所需的子字符串:

s <- "81 Delaware St, Staten Island, NY 10304, USA"
sub(",.*", "", s)
## => [1] "81 Delaware St"

请参阅R demo

替代方法是匹配子字符串直到第一个,

unlist(regmatches(s, gregexpr("^[^,]+", s)))

请参阅this R demo

答案 1 :(得分:0)

  

...所以我知道表达没有错。

表达错误。 ^.+?告诉grep从头到尾返回每个字符。

以下是R文档之外的一些有用资源。

Regular Expressions with The R Language

R Regular Expression

Getting and Cleaning Data

一个提示:如果您的街道地址在列出街道之前始终包含逗号后跟空格(,) - 您可以使用它来分隔城市中的地址。但总有一种方法可以提取数据。