我在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'
答案 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范围内的代理对来表示,实际上你只允许每一个字符,所以它不是很多过滤。 (.+
将是一种更简单的方式。)
然后,在世界不同地区表达可能构成有效城镇名称的内容非常困难。我很想接受任何控制字符和前导/尾随空格的东西,不是空字符串。