我搜索序列:
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)
结果:
[]
最佳答案
如果搜索的子字符串以任意顺序-请使用以下方法: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é
要提取最后三个词:
print(' '.join(result.split()[-3:])) # nunca más compraré
关于python - 用正则表达式排序单词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46171355/