在大写字母(regex)的2个单词之前找到以大写字母开头的n个单词

时间:2013-09-16 18:05:03

标签: python regex

我写了这个正则表达式,但这没有按预期工作。

((?:[A-Z][\w]+)?),[\s]([A-Z]{2})

以下是样本输入。

Fort Worth, TX
This is Forth Worth, TX
We are looking for someone from Columbus, MS.

我希望City和State能够使用python中的正则表达式获取上面的字符串示例,但这并没有按预期工作。

print re.findall('((?:[A-Z][\w]+){1,2}),[\s]([A-Z]{2})', input)

我错过了什么?

2 个答案:

答案 0 :(得分:1)

为什么不呢:

([A-Z][^,]+),\s([A-Z]{2})

或者,如果您只能在城市名称中包含单词字符和空格:

([A-Z][\w\s]+),\s([A-Z]{2})

Regex101 Demo

答案 1 :(得分:1)

您可能希望在城市名称组中添加空格字符,如下所示:

re.findall('((?:[A-Z][\w]+\s*){1,2}),[\s]([A-Z]{2})', input)

这将匹配大写拉丁字母后跟一个或多个单词字符和零个或多个空格字符,所有这些字符可能出现一次或两次,在组1中捕获,后跟逗号,空格字符,以及在第2组中捕获的两个大写拉丁字母。