【问题标题】:R regular expression to identify number after specific stringR正则表达式识别特定字符串后的数字
【发布时间】:2021-05-31 11:59:15
【问题描述】:

我发现以前的帖子不够灵活,无法适用于我的情况... Regular expression to get a number after particular string in R

我正在尝试做的是在对地址进行地理编码之前清理地址。 例如,我想删除所有邮政信箱信息。为了做到这一点,我需要能够识别暗示邮政信箱的字符串后面的数字。

df <- data.frame(Address = c("123 Fake street, Melbourne, 3000",
                       "PO box 2 123 Fake street, Melbourne, 3000", 
                       "PO box 22313 123 Fake street, Melbourne, 3000", 
                       "PObox 213 Unit 12 123 Fake street, Melbourne, 3000", 
                       "123 Fake street PO box 22313, Melbourne, 3000"))

df$Address <- as.character(df$Address)



> df
                                             Address
1                   123 Fake street, Melbourne, 3000
2          PO box 2 123 Fake street, Melbourne, 3000
3      PO box 22313 123 Fake street, Melbourne, 3000
4 PObox 213 Unit 12 123 Fake street, Melbourne, 3000
5      123 Fake street PO box 22313, Melbourne, 3000

我希望所有地址都返回为“123 Fake street, Melbourne, 3000”。

如你所见,

  • 邮政信箱可以多种方式拼写
  • 邮政信箱后面的数字长短不一
  • 邮政信箱部分可以出现在字符串中的任何位置
  • 字符串中还有其他数字(门牌号、单元号、邮政编码等)

【问题讨论】:

  • 你一直在用什么?
  • 你还有其他模式吗
  • 到目前为止我还没有使用任何东西,因为只有当我可以删除'PO box'字符串,包括字符串后面的'number'时,我才能清理。
  • 我想到目前为止我已经涵盖了所有模式,但你永远不知道重新输入数据!任何事情都有可能发生。

标签: r regex stringr


【解决方案1】:
gsub("( ){0,1}PO( ){0,1}box [0-9]+( Unit [0-9]+){0,1}( ){0,1}","",df$Address)

以你为例,这对我有用。

( ) 保留用于更简单的概念和阅读。

【讨论】:

  • 太棒了!我刚刚意识到我实际上想保留 Unit + 数字,但请注意以下内容适用:gsub("( ){0,1}PO( ){0,1}box [0-9]+( ){ 0,1}","",df$地址)
  • 您能否解释一下如何“读取”正则表达式参数?它会帮助我,或许还有其他稍后阅读本文的人
  • 括号内的内容将按正则表达式指示 {0,1} 处理,这意味着主题(在我们的例子中是 { 之前的东西 () )必须至少找到 0 次(它可以不存在)最多重复 1 次(现在)[0-9]+ 任何连续的数字单词 末端的 ( ){0,1} 用于您的邮政信箱在您的字符串内并且在前面的情况或后跟一个空格
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多