如何应对变音符号,而试图匹配正则表达式在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']
任何帮助,请?
这似乎是一个编码问题。您的代码正在运行。你期望有什么不同吗?您的前缀为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
或类似的东西。它会为你节省大量的头痛。
是的,我和bs4一起工作,但是认为它应该是小菜一碟,即使没有它: ) – Alex 2014-11-24 14:03:34
@亚历克斯太棒了,我很高兴你知道,在非常简单的情况下,'美丽颂'确实可以矫枉过正,干杯。 – 2014-11-24 14:05:11
你在运行python3吗?如果是的话,那么使用regex模块'regex.findall(r“/\">(.*?) a”,htmlstring)' – 2014-11-24 13:03:07
@Avinash否,谢谢你的提问。这是2.7。 – Alex 2014-11-24 13:12:47
当你打印一个列表,它的元素是'repr'ed,这就是为什么你看到'\ uXXXX'而不是字母。你的代码没有问题。 – georg 2014-11-24 13:39:47