搜索属于其他字符串

时间:2018-01-29 19:40:53

标签: r regex substring gsub stringr

我正在尝试用西班牙语提取街道名称。例如,AV代表大道。但是,我的数据还有“Barrios”或城市的区域。有一些包含自己名称中字符串的缩写,或者患者写下了一个注释而不是他们的地址,例如: AV:LA NAVARRA CL:SIN DATO LA NOMENCLATURA

有没有人建议如何只找到“CL”,而不是在单词的中间。我无法用间距来解决这个问题,因为有些数据以道路名称开头,而其他数据则没有。另外,有些人写了圣。类型和直接地址:CR78B这意味着我无法消除后面的空格。

以下是使用的数据示例:

streetNames -

LA NAVARRA

BARRIO VILLANUEVA CR 40 # 01-02

CR 32 # 92-00

SIN DATO LA NOMENCLATURA

CR4#89-00

我基本上需要它提取到CR而不包括那些不适用的CR。 现在,这就是我所拥有的:

str_extract(streetNames, "CR")

我知道很简单。如果您有任何建议或有任何不明之处,请告诉我

我尝试过单词boundary \ b,但无济于事。如果有人有任何建议,也许我错了。

这是我的代码:

A没有修复第一列和使用粘贴,因为我想保持灵活性而不是浪费时间。如果您认为解决方案是手动执行,那么我会这样做 这是:

cr <- c("\\bCR","CRR","CRA","CARRERA","CARERA", "CRRA", "CARREA", "KRA", "KR", "CARRRA", "CARREEA", "CARREA", "CARRARA(?=\\d*.))")
cl <- c("\\bCL", "CALLE", "CLL", "CALL", "CLLE", "CAALE", "CC", "CAL", "CLE", "KL(?=\\d*.))")
tv <- c("\\bTRANSVERSAL", "TV(?=\\d*.))")
dg <- c("\\bDIAGONAL", "DG", "DIAG", "DIAGIONAL", "DIGONAL", "DIG(?=\\d*.))")
av <- c("\\bAVENIDA", "AV", "AVDA(?=\\d*.))")
via <- c("\\bVÍA", "VIA(?=\\d*.))")
------------------------------------

cr <- paste(cr, collapse = "(?=\\d*.)|\\b")
crS <- paste("(?:(?<= )K(?=[ \\d*])", cr, sep = "|")

cl <- paste(cl, collapse = "(?=\\d*.)|\\b")
clS <- paste("(?:(?<= )C(?=[ \\d*])", cl, sep = "|")

tv <- paste(tv, collapse = "(?=\\d*.)|\\b")
tvS <- paste("(?:(?<= )T(?=[ \\d*])", tv, sep = "|")

dg <- paste(dg, collapse = "(?=\\d*.)|\\b")
dgS <- paste("(?:(?<= )D(?=[ \\d*])", dg, sep = "|")

av <- paste(av, collapse = "(?=\\d*.)|\\b")
avS <- paste("(?:(?<= )A(?=[ \\d*])", av, sep = "|")

via <- paste(via, collapse = "(?=\\d*.)|\\b")
viaS <- paste("(?:(?<= )V(?=[ \\d*])", via, sep = "|")

all <- paste(c(crS, clS, tvS, dgS, avS, viaS), collapse = "|")

最后的所有内容将与字符串提取一起使用,以取出所有符合条件的值。

1 个答案:

答案 0 :(得分:0)

如果我没有记错的话,你想匹配CR,它不应该在单词的中间,但是CR之后可能有一个不应该被选中的数字。

如果是这种情况,您可以在开始\b使用单词边界,并使用正向前瞻(?=来断言后面的内容可能是零或更多位\d*

\bCR(?=\d*)

例如:

str_extract("CR4#89-00", "\\bCR(?=\\d*)")

Test output