Python 包含和不包含字符的正则表达式

Python 包含和不包含字符的正则表达式,python,regex,Python,Regex,我有下面的正则表达式,它几乎可以正常工作 WORD_REGEXP = re.compile(r"[a-zA-Zá-úÁ-Úñ]+") 它包括带或不带重音的大写字母和小写字母以及西班牙语字母«ñ»。不幸的是,它还包括(我不知道为什么)西班牙语中也使用的字符,如«或«»,我也想删除这些字符 在像《代码》这样的台词中,España,olé我想通过正则表达式提取España和olé 如何在正则表达式中排除这两个字符(«»,«») 根据斯特里比什的说法,似乎正则表达式还可以。所以问题一定是另外一个。我

我有下面的正则表达式,它几乎可以正常工作

WORD_REGEXP = re.compile(r"[a-zA-Zá-úÁ-Úñ]+")
它包括带或不带重音的大写字母和小写字母以及西班牙语字母«ñ»。不幸的是,它还包括(我不知道为什么)西班牙语中也使用的字符,如«或«»,我也想删除这些字符

在像《代码》这样的台词中,España,olé我想通过正则表达式提取
España
olé

如何在正则表达式中排除这两个字符(«»,«»)


根据斯特里比什的说法,似乎正则表达式还可以。所以问题一定是另外一个。我包括完整的Python代码:

import re

linea = "¡Arriba Éspáña, ¿olé!"

WORD_REGEXP = re.compile(r"([a-zA-Zá-úÁ-Úñ]+)", re.UNICODE)

palabras = WORD_REGEXP.findall(linea)

for pal in palabras:
    pal = unicode(pal,'latin1').encode('latin1', 'replace')
    print pal
结果如下:

¡Arriba
Éspáña
¿olé

最好使用代码点。这些字符的代码点为

¡ - \x{A1}
¿ - \x{BF}  
这似乎超出了你的口音字符范围

 [a-zA-Z\x{E1}-\x{FA}\x{C1}-\x{DA}\x{F1}]+ 

根据文档,使用特殊顺序
'\w'

如果设置了UNICODE,则这将匹配字符[0-9_u1;]以及UNICODE字符属性数据库中分类为字母数字的任何字符

但是请注意,您的字符串必须是unicode字符串:

import re

linea = u"¡Arriba Éspáña, ¿olé!"

regex = re.compile(r"\w+", re.UNICODE)

regex.findall(linea)
# [u'Arriba', u'\xc9sp\xe1\xf1a', u'ol\xe9']
注意:错误的原因是您的正则表达式被解释为UTF-8,例如:

您的模式
r'([a-zA-Zá-ú-Úñ]+)
未定义为unicode字符串,因此它由文本编辑器编码为UTF-8,python将其读取为
([a-zA-Z\xc3\xa1-\xc3\xba\xc3\x81-\xc3\x9a\xc3\xb1]+)
,请注意以
\xc3
开头的模式(即unicode开始字节)

您可以通过打印
WORD\u REGEXP
repr
来确认这一点。因此,
re
模块使用的实际模式是:

patt = r"([a-zA-Zá-úÁ-Úñ]+)"
print patt.decode('latin1')
或:

简化它,实际上就是在使用模式

a-zA-Z\x81-\xc3
最后一个范围,涵盖了很多字符

快速显示正则表达式与那些标点符号不匹配。你能提供一把小提琴来重编这个问题吗?你在找吗?这有一个字符类:
\w
。这对我很有用:
re.search(r“\w+”,“España,olé!”)
a-zA-Z\x81-\xc3