我正在尝试用西班牙语提取街道名称。例如,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 = "|")
最后的所有内容将与字符串提取一起使用,以取出所有符合条件的值。
答案 0 :(得分:0)
如果我没有记错的话,你想匹配CR
,它不应该在单词的中间,但是CR
之后可能有一个不应该被选中的数字。
如果是这种情况,您可以在开始\b
使用单词边界,并使用正向前瞻(?=
来断言后面的内容可能是零或更多位\d*
例如:
str_extract("CR4#89-00", "\\bCR(?=\\d*)")