python正则表达式与unicode匹配城市名称

时间:2013-12-30 17:37:22

标签: python regex unicode

我在unicode中有一个城市名称,我希望将其与正则表达式匹配,但我也想验证它何时是字符串,例如"纽约"。 我搜索了一下,尝试了下面附带的东西,但无法弄清楚如何?

我试过这个正则表达式"([\ u0000- \ uFFFF] +)"在这个网站上:http://regex101.com/#python它有效,但无法在python中运行。

提前致谢!!

city=u"H\u0101na"
mcity=re.search(r"([\u0000-\uFFFFA-Za-z\s]+)", city, re.U)
mcity.group(0)
u'H'

1 个答案:

答案 0 :(得分:1)

mcity=re.search(r"([\u0000-\uFFFFA-Za-z\s]+)", city, re.U)

\x不同,\u不是正则表达式语法中的特殊序列,因此您的字符组匹配文字反斜杠,字母U等。

要在正则表达式中引用非ASCII,您必须将它们包含在Unicode字符串中作为原始字符,例如:

mcity=re.search(u"([\u0000-\uFFFFA-Za-z\\s]+)", city, re.U)

(如果您不想对\s进行双反斜杠,您还可以使用ur字符串,其中\u仍可用作转义符,但另一个转义为\x不这样做。但这有点令人困惑。)

此字符组是多余的:包括范围U + 0000到U + FFFF已涵盖所有A-Za-z\s,实际上包括控制字符的整个基本多语言平面。在Python的一个狭窄版本(包括Windows Python 2版本)中,BMP外部的字符使用U + D800到U + DFFF范围内的代理对来表示,实际上你只允许每一个字符,所以它不是很多过滤。 (.+将是一种更简单的方式。)

然后,在世界不同地区表达可能构成有效城镇名称的内容非常困难。我很想接受任何控制字符和前导/尾随空格的东西,不是空字符串。