Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中地址的正则表达式_R_Regex_Match - Fatal编程技术网

R中地址的正则表达式

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

我想拿一件匹配的,从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))

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