我搜索序列:
nunca [ADV + NEG + CIRC]más[ADV + comp + CIRC]compraré[V + H_PREDICAT_ACTION]
和
nuncamáscompraré
我的剧本:
corpus = "Me[Unknown] temo[Unknown] que[Unknown] buscare[Unknown]
otras[Unknown] opciones[Unknown] esta[Unknown] nunca[ADV+NEG+CIRC]
más[ADV+comp+PADV+H_CIRCONSTANT_QUANTITE] compraré[V+H_PREDICAT_ACTION]"
part1 = re.findall(r"(\w+)\[ADV\+NEG.*?\]", corpus)
part2 = re.findall(r"(\w+)\[ADV+comp+PADV.*?\]", corpus)
part3 = re.findall(r"(\w+)\[V\+H_PREDICAT.*?\]", corpus)
print(part1 + part2 + part3)
结果:
[]
答案 0 :(得分:1)
如果搜索的子字符串是任意顺序 - 请使用以下方法:re.findall()
方法:
corpus = "Me[Unknown] temo[Unknown] que[Unknown] buscare[Unknown] \
otras[Unknown] opciones[Unknown] esta[Unknown] nunca[ADV+NEG+CIRC] \
más[ADV+comp+PADV+H_CIRCONSTANT_QUANTITE] compraré[V+H_PREDICAT_ACTION]"
result = ' '.join(i[0] for i in re.findall(r'(\w+)\[[^][]*(AD|V)\+[^][]*\]', corpus, re.M | re.UNICODE))
print(result)
输出:
nunca más compraré
正则表达式解释:
(\w+)
- 匹配一个单词(字母数字序列)(例如nunca
)。放入第一个捕获的组(...)
\[
- 字面匹配开方括号[
[^][]*
- 匹配除方括号][
(AD|V)
- 更改群组,匹配AD
或V
密钥
\]
- 按字面意思匹配方括号]
代表。 \[[^][]*(AD|V)\+[^][]*\]
将匹配[ADV+NEG+CIRC]
<强> ---------- 强>
如果序列顺序严格 - 请使用re.sub()
函数代替re.findall()
删除所有括号序列:
corpus = "Me[Unknown] temo[Unknown] que[Unknown] buscare[Unknown] \
otras[Unknown] opciones[Unknown] esta[Unknown] nunca[ADV+NEG+CIRC] \
más[ADV+comp+PADV+H_CIRCONSTANT_QUANTITE] compraré[V+H_PREDICAT_ACTION]"
result = re.sub(r'\[[^][]+\]', '', corpus, re.M | re.UNICODE)
print(result)
输出:
Me temo que buscare otras opciones esta nunca más compraré
提取最后3个单词:
print(' '.join(result.split()[-3:])) # nunca más compraré