如何指定从
' '
(空格)到 \u00D7FF
的 unicode 字符范围?
我有一个像
r'[\u0020-\u00D7FF]'
这样的正则表达式,它不会编译,因为它是一个错误的范围。我是 Unicode 正则表达式的新手,所以以前没有遇到过这个问题。
有没有办法让这个编译或者我忘记或还没学过的正则表达式?
您的 unicode 范围的语法不会达到您的预期。
原始
r''
字符串会阻止 \u
转义被解析,并且正则表达式引擎不会执行此操作。该集合中唯一的范围是 [0-\]
:
>>> re.compile(r'[\u0020-\u00d7ff]', re.DEBUG)
in
literal 117
literal 48
literal 48
literal 50
range (48, 117)
literal 48
literal 48
literal 100
literal 55
literal 102
literal 102
将其设为 Unicode 文字会导致
\u
解析,同时保留其他反斜杠(尽管这不是这里的问题),但前导零将其搞乱。语法为 \uxxxx
或 \Uxxxxxxxx
,因此解析为“\u00d7
, f
, f
”。
>>> re.compile(ur'[\u0020-\u00d7ff]', re.DEBUG)
in
range (32, 215)
literal 102
literal 102
删除前导零或切换到
\U0000d7ff
将修复它:
>>> re.compile(ur'[\u0020-\ud7ff]', re.DEBUG)
in
range (32, 55295)
如果您使用的是 Python 2.x,则应确保指定一个 unicode 字符串(使用 u'' 或内置的“unicode”):
>>> r = re.compile(u'[\u0020-\uD7FF]')
>>> r.search(u'foo \uD7F0 bar')
<_sre.SRE_Match object at 0xb7084950>
r.search(u' ')
<_sre.SRE_Match object at 0xb7084b48>
使用原始字符串(就像你一样,使用 r'')会得到由“backlines”+字母“u”加上数字 0 加...组成的 (ascii) 字符串。