使用Regex提取地址

时间:2017-02-21 06:31:27

标签: regex

我正在尝试查找Street|St|Drive|Dr,然后获取该行的所有内容以提取地址:

(?:(?!\s{2,}|\$).)*(Street|St|Drive|Dr).*?(?=\s{2,})

..但它也匹配:

Full match  420-442 ` Tax Invoice/Statement`
Group 1.    433-435 `St`

Full match  4858-4867   `163.66 DR`
Group 1.    4865-4867   `DR`

Full match  11053-11089 ` Permanent Water Saving Plan, please`
Group 1.    11077-11079 `Pl`

我如何仅匹配整个单词而不匹配子串,因此忽略contain这些单词(例如第一个匹配)的单词。

1 个答案:

答案 0 :(得分:1)

一种选择是使用单词边界锚\b来完成此任务:

(?:(?!\s{2,}|\$).)*\b(Street|St|Drive|Dr)\b.*?(?=\s{2,})

如果你提供一个你要解析的原始文本的例子,如果这不起作用,我将能够提供额外的帮助。

编辑: 从the link you posted in a comment开始,\b解决方案似乎解决了您的问题:

  

我如何只匹配整个单词而不匹配子串,因此忽略包含这些单词的单词(例如第一个匹配)。

但是,您的正则表达式似乎还有其他问题。