R中地址的正则表达式
我想拿一件匹配的,从CALLE或CARRERA开始,到最后找到的号码结束。我搞不懂这个正则表达式: 输入1:CALLE 15#21-32 SEGUNDO PISO公寓 输出1:CALLE 15#21-32 输入2:此字符串不匹配 输出2:此字符串不匹配 然后用匹配的子串替换向量。但如果没有匹配的子字符串,则保持原始字符串不变 这就是我尝试过的:R中地址的正则表达式,r,regex,match,R,Regex,Match,我想拿一件匹配的,从CALLE或CARRERA开始,到最后找到的号码结束。我搞不懂这个正则表达式: 输入1:CALLE 15#21-32 SEGUNDO PISO公寓 输出1:CALLE 15#21-32 输入2:此字符串不匹配 输出2:此字符串不匹配 然后用匹配的子串替换向量。但如果没有匹配的子字符串,则保持原始字符串不变 这就是我尝试过的: df$DirRes2 <- regmatches(df$DirRes2, regexpr("(CALLE.*\\d | CARRERA.*\\d
df$DirRes2 <- regmatches(df$DirRes2, regexpr("(CALLE.*\\d | CARRERA.*\\d | .*)", df$DirRes2))
df$DirRes2我们可以使用base R
sub(".*((?i)(CALLE|CARRERA).*[0-9])[^0-9]+$", "\\1", str1, perl = TRUE)
#[1] "CALLE 15 # 21-32" "THIS STRING WON'T MATCH" "Calle 25"
或者使用str\u extract
library(stringr)
v1 <- trimws(str_extract(str1, "(?i)(CALLE|CARRERA)\\s*[0-9]+\\s*#*\\s*[0-9-]*"))
ifelse(is.na(v1), str1, v1)
#[1] "CALLE 15 # 21-32" "THIS STRING WON'T MATCH" "Calle 25"
数据
str1请显示字符串的开始和结束位置。…
是否也是字符串的一部分?对不起,我编辑了它。格式为原始字符串…至。。。结果字符串是否可以显示预期的输出?是否再次编辑。我想现在已经很清楚了,那辆车可能不见了。字符串可以是“Calle 25 Something”,它应该输出“Calle 25”。在大多数情况下,它工作正常,但这里有一个问题:“Calle 18 CARRERA 7 CONDOMINIO BELLO”正在变为“CARRERA 7”。它应该是“CALLE 18 CARRERA 7”。有什么想法吗?对不起,我帮不了什么忙,我在这里完全迷路了。@akrun,你可以使起始部分不贪婪,以赶上“CALLE 18 CARRERA 7”。此外,由于找到的最后一个数字可能是字符串中的最后一个字符(谁知道呢?),因此您也可以对此进行调整:“*?((?i)(CALLE | CARRERA)。*[0-9]).*$”
嗯。。。似乎对我有用。我最初试过使用sub(“.*”((?:CALLE | CARRERA)。*\\d)。*$”,“\\1”,str1,perl=TRUE,ignore.case=TRUE)
,这对我也有用。@Jota抱歉,我忘了前面的perl=TRUE
。它起作用了
sub(".*?((?:CALLE|CARRERA).*\\d).*$", "\\1", str2, perl = TRUE, ignore.case = TRUE)
#[1] "CALLE 15 # 21-32" "THIS STRING WON'T MATCH" "Calle 25"
#[4] "CALLE 18 CARRERA 7"
str1 <- c("CALLE 15 # 21-32 APARTAMENTO SEGUNDO PISO",
"THIS STRING WON'T MATCH", "Calle 25 Something")
str2 <- c(str1, "CALLE 18 CARRERA 7 CONDOMINIO BELLO")