【发布时间】:2017-03-23 15:36:24
【问题描述】:
鉴于以下数据集,我正在尝试找到一种使用正则表达式提取城市名称的方法。
波士顿(马萨诸塞州)、纽约市(纽约州、康涅狄格州、新泽西州)
纽约市(纽约州、康涅狄格州、新泽西州)、费城(宾夕法尼亚州、新泽西州)
印第安纳波利斯(印第安纳州)、圣路易斯(密苏里州、伊利诺伊州)
圣。路易斯(密苏里州,伊利诺伊州),堪萨斯城(密苏里州,堪萨斯州)
我希望正则表达式的输出是:
波士顿,纽约市
纽约市,费城
印第安纳波利斯,圣。路易斯
圣。堪萨斯城圣路易斯
我尝试根据两个标准进行模式匹配:
(\\w+\\w(?=.())) | (\\w+\\W\\h\\w+(?=.()))
- 由来自
[a-zA-Z]+的信件组成的城市,例如波士顿或费城 - 由句点/附加空格等附加字符组成的一个单词。
表达式准确匹配第一种情况。但是,对于第二种情况,它只匹配第一次出现的St. Louis。
我还尝试了以下方法:
(\\w+ ?\\w(?=.())) | (\\w+\\h\\w+\\h\\w+(?=\\s.()))| (\\w+\\h\\w+(?=\\s.()))
- 第一个涵盖与上述相同的情况 - 由一个单词的城市组成。
- 第三个成功地涵盖了
New York City的情况,但是,就像第一个一样,未能识别出相同模式的情况。 - 与上一个模式中使用的大小写相同,匹配
St. Louis失败,而是匹配Kansas City。
【问题讨论】:
-
应该是
NC,GA吗? (没有空格) -
在什么语言/环境下?
-
请分享您的尝试。此外,最好知道您打算在哪种编程语言/工具中使用正则表达式。
标签: java regex regex-greedy