【问题标题】:Regex to get previous word followed by a phrase in python正则表达式获取前一个单词后跟python中的一个短语
【发布时间】:2021-09-07 08:34:47
【问题描述】:

gun store之前出现local这个词时,我需要提取它。但是,由于使用了拆分,下面的函数没有返回它。有没有办法解决这个问题?

消息来源如下:据 2019 年 12 月 30 日报道,在都会区迈普,一群至少 10 名暴徒企图抢劫当地一家枪支商店。

函数如下:

    regex_filter = r'local|dozen|several|looted'
    property_key = r"\b(gun store|establishments|supermarket)\b"
    source= source.split()
    for i, w in enumerate(source):
        if (re.search(property_key, w)):
            if re.match(re.compile(regex_filter, flags=re.IGNORECASE), source[i-1]):
                return source[i-1]```

【问题讨论】:

  • 您在寻找什么“方式”?为什么不使用(\S+)\s+(?:gun store|establishments|supermarket)\b
  • 嗨@WiktorStribiżew,感谢您在这里的帮助,但它不起作用,我认为问题是由分裂引起的,它试图分别匹配枪和存储
  • 这也是我要说的。为什么不使用m = re.search(r'(\S+)\s+(?:gun store|establishments|supermarket)\b', text),然后使用if m: print(m.group(1))?见ideone.com/lxygzY
  • 当然@WiktorStribiżew,会这样做的。

标签: python regex split re text-extraction


【解决方案1】:

我建议提取property_key 中列出的任何单词之前的单词

re.search(r"(\S+)\s+(?:gun store|establishments|supermarket)\b", text)

或者,如果单词由单词字符组成,并且单词之间可以有任何空格/标点符号:

re.search(r"([^\W_]+)[\W_]+(?:gun store|establishments|supermarket)\b", text)

请参阅regex demo

(\S+)\s+ 将一个或多个非空白字符匹配并捕获到第 1 组,然后匹配一个或多个空白字符,而([^\W_]+)[\W_]+ 将一个或多个字母或数字匹配并捕获到第 1 组,然后再匹配一个或多个匹配非单词或下划线字符。

Python demo

import re
rx = r"(\S+)\s+(?:gun store|establishments|supermarket)\b"
text = "As reported on 30 December 2019, in Maipu, Metropolitan region, a group of at least 10 rioters attempted to loot a local gun store."
m = re.search(rx, text)
if m:
    print(m.group(1))

# => local

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 2014-05-18
    • 2013-10-13
    • 1970-01-01
    相关资源
    最近更新 更多