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

2024-09-28 21:07:29 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的脚本:

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)

我需要这些输出:

nunca más compraré

以及

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]

输出:

[]


Tags: unknowntransactionsccompadvtempsforteneg
2条回答
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之前的字符,但是\w不匹配[],所以我使用了([A-Za-z\[\] ]+)\],它匹配字母表、大括号和空格
  2. 你已经使用了/(\w+)其中\w+来匹配你的单词,但是/之前的(\w+)是不必要的,它不会找到你想要的结果
  3. 最后,您忘记在上次匹配时使用转义字符,因为您使用了[V+H_PREDICAT_ACTION+C_PREDICAT_TRANSACTION.*?\],所以我使用\+而不是+来转义字符+。你知道吗

因此,应用修复程序将得到以下结果:

nunca más compraré

使用re.findallstr.join的组合

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

细节

  • [^\s\]]+-匹配任何不是空格字符或右大括号的内容
  • (?=\[)-开始时的展望[

相关问题 更多 >