【问题标题】:Regex to extract city names (.NET)正则表达式提取城市名称(.NET)
【发布时间】:2017-04-18 17:59:01
【问题描述】:

寻找从地址中提取城市名称的表达式。尝试在使用 .NET 正则表达式的 WebHarvy 中使用此表达式

示例地址

1234 Savoy Dr Ste 123
New Houston, TX 77036-3320

1234 Savoy Dr Ste 510
Texas, TX 77036-3320

所以城市名称可以是单个或两个单词。

我正在尝试的表达式是

(\w|\w\s\w)+(?=,\s\w{2})

当我在 RegexStorm 上尝试这个时,它似乎工作正常,但是当我在 WebHarvy 中使用它时,它只捕获城市名称新休斯顿的“n”和奥斯汀的“n”

我哪里错了?

【问题讨论】:

  • WebHarvey 中尝试(\w+(?:[\p{Zs}\t]+\w+)*),\s\w{2}(或(\w+(?:[^\S\r\n]+\w+)?),\s\w{2}),而不是在线测试仪。
  • 像魅力一样工作。您能否解释一下这个表达式,以便我知道它是做什么的?非常感谢!

标签: regex regex-lookarounds webharvy


【解决方案1】:

在 WebHarvey 中,如果正则表达式包含捕获组,则返回其内容。因此,您不需要前瞻。

另一点是您需要匹配 1 个或多个单词字符,可选地后跟一大块空格,后跟 1 个或多个单词字符。您的正则表达式包含一个重复的捕获组,其内容在每次迭代时都被重写,并且在找到匹配项后,第 1 组仅包含 n

使用

(\w+(?:[^\S\r\n]+\w+)?),\s\w{2})

regex demo here

[^\S\r\n]+ 部分匹配除 CR 和 LF 之外的任何空格。您可以使用 [\p{Zs}\t]+ 匹配任何 1+ 个水平空格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多