正则表达式找到方括号外的所有文本

时间:2017-09-13 04:45:55

标签: python regex

这是我的剧本:

import re

corpus = "Me[Unknown] temo[Unknown] que[Unknown] buscare[Unknown] otras[Unknown] opciones[Unknown] esta[Unknown] nunca[ADV+NEG+H_CIRCONSTANT_TEMPS+C_TPS_FREQUENCE+SC_FREQUENCE_FORTE] 
más[ADV+comp+PADV+H_CIRCONSTANT_QUANTITE+C_QNT_FORTE] compraré[V+H_PREDICAT_ACTION+C_PREDICAT_TRANSACTION+SC_TRANSACTION_ACHAT] buscare[INCONNU] otras[INCONNU] opciones[INCONNU] por[INCONNU] la[INCONNU] calidad[INCONNU] de[INCONNU] la[INCONNU] luz[INCONNU]"

regex = re.findall(r"(\w+)\[ADV\+NEG\+H_CIRCONSTANT_TEMPS.*?\]/(\w+)\[ADV\+comp\+PADV\+H_CIRCONSTANT_QUANTITE.*?\]/(\w+)\[V+H_PREDICAT_ACTION+C_PREDICAT_TRANSACTION.*?\]", texte)

print(regex)

我需要这些输出:

  

nuncamáscompraré

  

nunca [ADV + NEG + H_CIRCONSTANT_TEMPS + C_TPS_FREQUENCE + SC_FREQUENCE_FORTE]más[ADV + comp + PADV + H_CIRCONSTANT_QUANTITE + C_QNT_FORTE]compraré[V + H_PREDICAT_ACTION + C_PREDICAT_TRANSACTION + SC_TRANSACTION_ACHAT]

输出:

  

[]

2 个答案:

答案 0 :(得分:1)

使用re.findallstr.join

的组合
In [48]: ' '.join(re.findall('[^\s\]]+(?=\[)', text))
Out[48]: 'nunca más compraré'

<强>详情

  • [^\s\]]+ - 匹配任何不是空白字符或右括号的内容
  • (?=\[) - 预测开场[

答案 1 :(得分:1)

import re

text = "Me[Unknown] temo[Unknown] que[Unknown] buscare[Unknown] otras[Unknown] opciones[Unknown] esta[Unknown] nunca[ADV+NEG+H_CIRCONSTANT_TEMPS+C_TPS_FREQUENCE+SC_FREQUENCE_FORTE]más[ADV+comp+PADV+H_CIRCONSTANT_QUANTITE+C_QNT_FORTE] compraré[V+H_PREDICAT_ACTION+C_PREDICAT_TRANSACTION+SC_TRANSACTION_ACHAT] buscare[INCONNU] otras[INCONNU] opciones[INCONNU] por[INCONNU] la[INCONNU] calidad[INCONNU] de[INCONNU] la[INCONNU] luz[INCONNU]"

regex = re.findall(r"([A-Za-z\[\] ]+)\] (\w+)\[ADV\+NEG\+H_CIRCONSTANT_TEMPS.*?\](\w+)\[ADV\+comp\+PADV\+H_CIRCONSTANT_QUANTITE.*?\](?: )(\w+)\[V\+H_PREDICAT_ACTION\+C_PREDICAT_TRANSACTION.*?\]", text)

print(' '.join(regex[0][1:]))

我刚刚纠正了你的正则表达式中的一些错误:

  1. 您已使用(\w+)匹配nunca之前的字符,但\不匹配[]所以我使用([A-Za-z\[\] ]+)\]代替匹配字母,大括号和空格
  2. 您已使用/(\w+) \w+匹配您的字词,/之前(\w+)是不必要的,但却找不到您想要的结果
  3. 最后,您忘记在使用[V+H_PREDICAT_ACTION+C_PREDICAT_TRANSACTION.*?\]的最后一场比赛中使用转义字符,因此我使用\+代替+来转义字符+
  4. 因此,应用此修复程序,您将获得结果:

    nunca más compraré