我有一个 unicode 格式的城市名称,我想将其与正则表达式匹配,但我也想验证它是否是字符串,例如“New York”。 我搜索了一下并尝试了下面附加的内容,但不知道如何实现?
我在这个网站上尝试了这个正则表达式“([\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'
最佳答案
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 范围内的代理项对表示,您实际上允许每个字符,因此这并不是一个很大的问题。筛选。 (.+
是一种更简单的表达方式。)
话又说回来,要表达在世界不同地区什么可能构成有效的城镇名称是相当困难的。我很想接受任何除去控制字符和前导/尾随空格的非空字符串。
关于python正则表达式与unicode匹配城市名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20844528/