如何应对变音符号,而试图匹配正则表达式在Python

问题描述:

尝试使用Unicode的HTML转义正则表达式变音符号:如何应对变音符号,而试图匹配正则表达式在Python

#!/usr/bin/python 
# -*- coding: utf-8 -*- 
import re 
htmlstring=u'''/">čćđš</a>.../">España</a>''' 

print re.findall(r'/">(.*?)</a', htmlstring, re.U) 

生产:

[u'\u010d\u0107\u0111\u0161', u'Espa\xf1a'] 

任何帮助,请?

+0

你在运行python3吗?如果是的话,那么使用regex模块'regex.findall(r“/\">(.*?) a”,htmlstring)' – 2014-11-24 13:03:07

+0

@Avinash否,谢谢你的提问。这是2.7。 – Alex 2014-11-24 13:12:47

+0

当你打印一个列表,它的元素是'repr'ed,这就是为什么你看到'\ uXXXX'而不是字母。你的代码没有问题。 – georg 2014-11-24 13:39:47

这似乎是一个编码问题。您的代码正在运行。你期望有什么不同吗?您的前缀为u的字符串是unicode文字。以\u开头的字符是unicode字符,后跟四个十六进制数字,而以\x开头的字符是unicode字符,后跟两个十六进制数字。如果打印出来(而不是看着他们__repr__方法)你的结果,你会看到你收到的结果,它显示你正在寻找:

results = [u'\u010d\u0107\u0111\u0161', u'Espa\xf1a'] 
for result in results: 
    print result 

čćđš 
España 

在你的代码(即在列表中)你看到这些Unicode文本的表示:

for result in results: 
    print result.__repr__() 

u'\u010d\u0107\u0111\u0161'  # what shows up in your list 
u'Espa\xf1a' 

顺便说一句,似乎您试图用正则表达式解析HTML。你应该尝试BeautifulSoup或类似的东西。它会为你节省大量的头痛。

+0

是的,我和bs4一起工作,但是认为它应该是小菜一碟,即使没有它: ) – Alex 2014-11-24 14:03:34

+1

@亚历克斯太棒了,我很高兴你知道,在非常简单的情况下,'美丽颂'确实可以矫枉过正,干杯。 – 2014-11-24 14:05:11