我有一个地址列表,我想分成两个数组:
text.2
)以下是一个例子:
text.1 <- "CALLE COMPOSITOR LEHMBERG RUIZ 19-21"
text.2 <- "CALLE COMPOSITOR LEHMBERG-RUIZ 19-21"
要提取门牌号码,我尝试使用gsub("[^0-9\\-]", "", x)
,text.1
适用text.2
,但效果不如> gsub("[^0-9\\-]", "", text.1)
[1] "19-21"
> gsub("[^0-9\\-]", "", text.2)
[1] "-19-21"
:
gsub("[0-9]", "", x)
要提取我使用ifelse( substr( gsub("[^0-9\\-]", "", x ), 1, 1 ) == "-" ,
substr( gsub("[^0-9\\-]", "", x), 2, nchar( gsub("[^0-9\\-]", "", x) )
)
, gsub("[^0-9\\-]", "", x)
)
的地址行,会产生类似的问题。
我可以使用以下代码解决此问题:
"19-21"
为x = text.1
和x = text.2
产生gsub
。但是,正如人们可以说它不是很优雅。
我的问题是,如果有一种“优雅”的方式来解决这个问题(例如以更聪明的方式使用componentDidMount() {
this.props.loadClient(); // dispatch an action from your component
}
)?
答案 0 :(得分:2)
当模式为true时,我们可以使用正则表达式SKIP
并删除所有其他字符
gsub("(\\d+)-(\\d+)(*SKIP)(*F)|.", "", text.1, perl = TRUE)
#[1] "19-21"
gsub("(\\d+)-(\\d+)(*SKIP)(*F)|.", "", text.2, perl = TRUE)
#[1] "19-21"
答案 1 :(得分:1)
我建议在你的情况下使用str_extract而不是gsub。你可以这样:
library(stringr)
str_extract(text.1,"[0-9]{1,3}\\-[0-9]{1,3}")
[1] "19-21"
str_extract(text.2,"[0-9]{1,3}\\-[0-9]{1,3}")
[1] "19-21"
str_extract(text.1,"[^0-9][A-Z\\-\\s]+")
[1] "CALLE COMPOSITOR LEHMBERG RUIZ "
str_extract(text.2,"[^0-9][A-Z\\-\\s]+")
[1] "CALLE COMPOSITOR LEHMBERG-RUIZ "