【问题标题】:str_replace with multiple arguments [closed]带有多个参数的 str_replace [关闭]
【发布时间】:2013-12-14 11:31:01
【问题描述】:

enter code herei 在提取字符串时遇到问题。我想从街道名称+门牌号码中提取街道名称。问题是一些街道名称包含数字。我可以组合多个模式来提取字符串吗?

w<-c("STREET TEST 55A","Q 7 NR 50","STREET TEST TEST 55-56")
place<-c("B" "A" "C")

    w<-str_replace(w,perl("^(\\b[0-9]+.*\\b) | \\b([A-Z] ?[0-9] ?N?R?)([0-9]*)\\b"),"\\1")

我想要一个向量

w<-c("STREET TEST","Q 7","STREET TEST TEST)

我也有一个矢量的地方。而Q 7 NR 50的情况只发生在A而不是B/C 提前致谢

【问题讨论】:

  • 我怀疑您的实际问题通常可能无法解决,至少除非您的数据仅限于具有常规街道命名和房屋编号约定的小地理区域。您可能假设街道名称通常不包含数字,并为遇到的少数例外情况添加特定规则。即使这样,如果您的数据是全球性的,您可能需要处理额外的问题,即在世界不同地区,约定可能是在门牌号之前、之后或可能之间写下街道名称。此外,房屋可能有名字。

标签: regex string r pcre


【解决方案1】:

我假设如果最后一个单词仅包含数字,那么您还需要倒数第二个单词来制作房屋名称。如果此假设成立,则以下代码有效

w<-c("STREET TEST 55A","Q 7 NR 50","STREET TEST TEST 55-56")
library(stringr)
housename <- ifelse(nchar(gsub("[[:digit:]]","",word(w,-1)))==0
,paste(word(w,-2),word(w,-1),sep=" ")
,word(w,-1))
streetname <- str_replace_all(w,housename,"")

家名
[1] "55A" "NR 50" "55-56"
街道名称
[1]“街头测试”“Q 7”“街头测试”

【讨论】:

    猜你喜欢
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 2010-09-15
    相关资源
    最近更新 更多