【问题标题】:Regular expression | Extract words with uppercase within 3 words from a preposition正则表达式 |从介词中提取3个单词内的大写单词
【发布时间】:2017-04-25 19:33:40
【问题描述】:

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

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

它允许我提取这种位置:

of Mogadishu
in Istanbul
of Beletwein

但是,当公式如下时,它不允许我提取位置:

in downtown Tunis
in central Mogadishu
in a town near Mogadishu

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

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

【问题讨论】:

  • 正则表达式可能不是执行此操作的方法 - 查看 NLTK。

标签: regex python-3.5


【解决方案1】:

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

我相信这会影响您示例文本中的所有内容。

  • \b 确保介词本身而不是另一个词的一部分。
  • 第一组击中介词,很容易修改以添加更多。
  • 第二组未捕获,您可以修改 {0,3} 括号中 prep 和 location 之间的附加字数。
  • 第三组获取您的位置。

【讨论】:

    【解决方案2】:

    试一试:

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

    【讨论】:

      【解决方案3】:

      可能是这样的(你可以改变字数):

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-11
        相关资源
        最近更新 更多