In [1]:
import re
num = re.compile("\d+")
# ASCII digits
num.match("123")
Out[1]:
In [2]:
# Arabic digits
num.match("\u0661\u0662\u0663")
Out[2]:
如果你想在模式中包含指定的 Unicode
字符,你可以使用 Unicode
字符对应的转义序列(比如 \uFFF
或者 \UFFFFFFF
)。 比如,下面是一个匹配几个不同阿拉伯编码页面中所有字符的正则表达式:
In [3]:
arabic = re.compile("[\u0600-\u06ff\u0750-\u077f\u08a0-\u08ff]+")
当执行匹配和搜索操作的时候,最好是先标准化并且清理所有文本为标准化格式(参考 2.9
小节)。 但是同样也应该注意一些特殊情况,比如在忽略大小写匹配和大小写转换时的行为。
In [4]:
pat = re.compile("stra\u00dfe", re.IGNORECASE)
s = 'straße'
# Matches
pat.match(s)
Out[4]:
In [5]:
# Doesn't match
pat.match(s.upper())
In [6]:
# Case folds
s.upper()
Out[6]:
讨论
混合使用 Unicode
和正则表达式通常会让你抓狂。 如果你真的打算这样做的话,最好考虑下安装第三方正则式库, 它们会为 Unicode
的大小写转换和其他大量有趣特性提供全面的支持,包括模糊匹配。