正则表达式获取前一个词后跟 python 中的一个短语
Regex to get previous word followed by a phrase in python
当 gun store 之前,我需要提取 local 一词。但是,由于使用了 split,下面的函数没有返回它。有什么办法可以解决这个问题吗?
消息来源如下:据 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]```
我建议用
提取property_key
中列出的任何单词之前的单词
re.search(r"(\S+)\s+(?:gun store|establishments|supermarket)\b", text)
或者,如果单词由单词字符组成,并且单词之间可以有任何 whitespace/punctuation:
re.search(r"([^\W_]+)[\W_]+(?:gun store|establishments|supermarket)\b", text)
参见regex demo。
(\S+)\s+
将一个或多个非空白字符匹配并捕获到Group 1中,然后再匹配一个或多个空白字符,而([^\W_]+)[\W_]+
将一个或多个字母或数字匹配并捕获到Group 1中1 然后匹配一个或多个非单词或下划线字符。
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
当 gun store 之前,我需要提取 local 一词。但是,由于使用了 split,下面的函数没有返回它。有什么办法可以解决这个问题吗?
消息来源如下:据 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]```
我建议用
提取property_key
中列出的任何单词之前的单词
re.search(r"(\S+)\s+(?:gun store|establishments|supermarket)\b", text)
或者,如果单词由单词字符组成,并且单词之间可以有任何 whitespace/punctuation:
re.search(r"([^\W_]+)[\W_]+(?:gun store|establishments|supermarket)\b", text)
参见regex demo。
(\S+)\s+
将一个或多个非空白字符匹配并捕获到Group 1中,然后再匹配一个或多个空白字符,而([^\W_]+)[\W_]+
将一个或多个字母或数字匹配并捕获到Group 1中1 然后匹配一个或多个非单词或下划线字符。
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