【问题标题】:Find n words starting with capital letter before 2 words of capital letters (regex)在大写字母的 2 个单词之前找到 n 个以大写字母开头的单词(正则表达式)
【发布时间】:2013-09-16 18:05:03
【问题描述】:

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

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

以下是示例输入。

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

我希望在 python 中使用正则表达式的上述字符串样本中包含 City 和 State ,但这只是没有按预期工作。

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

我错过了什么?

【问题讨论】:

  • 城市名称之间的空格。
  • 您可能想要使用某种自然语言解析。

标签: python regex


【解决方案1】:

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

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

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

【讨论】:

  • 有效,你的回答没有违反我的其他规则,所以答案交给你。
【解决方案2】:

为什么不只是:

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

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

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

Regex101 Demo

【讨论】:

  • 第二个正则表达式将带来整个文本“我们正在寻找来自密西西比州哥伦布的人。”不会吗?
  • @UmairAshraf 是的,但你怎么能确定城市名称不超过 2 个字?不管怎样,你的问题似乎已经解决了。
  • 我已经看到了将应用此正则表达式的完整数据集,所以是的,我确定为什么 city max 为 2 个字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-22
相关资源
最近更新 更多