带正则表达式的序列词

时间:2017-09-12 08:20:36

标签: python regex python-3.x

我搜索序列:

  

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)

结果:

  

[]

1 个答案:

答案 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) - 更改群组,匹配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é

提取最后3个单词:

print(' '.join(result.split()[-3:]))    # nunca más compraré