正则表达式|从介词中提取3个单词内的大写单词

时间:2016-12-10 12:13:06

标签: regex python-3.5

我试图从几篇文章中提取城市和国家。我正在使用的正则表达式:

of Mogadishu
in Istanbul
of Beletwein

它允许我提取这种位置:

in downtown Tunis
in central Mogadishu
in a town near Mogadishu

但是,如果按照以下方式制定,则不允许我提取位置:

break LINE

我想提取的是在3个单词范围内的介词(in,of,through,at)之后以大写字母开头的任何单词。

[在链接中有一个文本语料库的样本](https://regex101.com/r/0DRayP/6)和正则表达式

3 个答案:

答案 0 :(得分:2)

\b(at|in|of) (?:\w+\s){0,3}([A-Z]\w+)

我相信它会触及示例文本中的所有内容。

  • \b确保介词本身而不是另一个词的一部分。
  • 第一组击中介词,这可以轻松修改以添加更多。
  • 第二组无法捕获,您可以修改{0,3}括号中的准备工作和位置之间的其他字数。
  • 第三组获取您的位置。

答案 1 :(得分:0)

尝试使用:

\b(?:at|in|of)\b[^A-Z]+([A-Z]\w*)

答案 2 :(得分:0)

可能是这样的(你可以改变单词数量):

(at|in|of)( \w+){0,2} [A-Z](?:\w+)?