[英]Regular expression including and excluding characters
我有以下几乎可以正常工作的正则表达式。
WORD_REGEXP = re.compile(r"[a-zA-Zá-úÁ-Úñ]+")
它包括带和不带重音的小写和大写字母以及西班牙语字母«ñ»。 不幸的是,它还包括(我不知道为什么)在西班牙语中也使用的字符,如 «¡» 或 «¿»,我也想删除它们。
像¡España, olé!
我想通过正则表达式只提取España
和olé
。
如何在正则表达式中排除这两个字符(«¿»、«¡»)?
根据 stribizhe 的说法,正则表达式似乎没问题。 所以问题一定是其他的。 我包括完整的 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é
根据文档,使用特殊序列'\\w'
:
如果设置了 UNICODE,这将匹配字符 [0-9_] 加上在 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_REGEXP
的repr
来确认这WORD_REGEXP
。 所以re
模块使用的实际模式是:
patt = r"([a-zA-Zá-úÁ-Úñ]+)"
print patt.decode('latin1')
或者:
a-z
A-Z
\xc3
\xa1-\xc3
\xba
\xc3
\x81-\xc3
\x9a
\xc3
\xb1
简化它,您实际上是在使用模式
a-zA-Z\x81-\xc3
最后一个范围,涵盖了很多字符!!
最好使用代码点。 这些字符的代码点是
¡ - \x{A1}
¿ - \x{BF}
这似乎超出了您的重音字符的范围。
[a-zA-Z\x{E1}-\x{FA}\x{C1}-\x{DA}\x{F1}]+
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.