用于提取城市名称的正则表达式 (.NET)

Regex to extract city names (.NET)

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

示例地址

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 中使用它时,它只捕获城市名称 New Houston 中的 'n' 和 'n' 来自奥斯汀

我哪里错了?

在 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+ 水平 空格。