我搜索序列:


  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)-交替组,匹配ADV
\]-按字面上匹配右方括号]


对于前。 \[[^][]*(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/

10-12 12:21
查看更多