Python 如何指定unicode字符的范围
如何指定从Python 如何指定unicode字符的范围,python,regex,unicode,Python,Regex,Unicode,如何指定从'(空格)到\u00D7FF的unicode字符范围 我有一个像r'[\u0020-\u00D7FF]'这样的正则表达式,它不会编译,因为它的范围不好。我是Unicode正则表达式的新手,所以以前没有遇到过这个问题 有没有一种方法可以使此表达式或正则表达式编译成我忘记或还没有学会的表达式?如果您使用的是Python 2.x,您应该确保指定的是unicode字符串(带有u'',或内置的unicode): >>r=re.compile(u'[\u0020-\uD7FF]') >>>r.se
'
(空格)到\u00D7FF
的unicode字符范围
我有一个像r'[\u0020-\u00D7FF]'
这样的正则表达式,它不会编译,因为它的范围不好。我是Unicode正则表达式的新手,所以以前没有遇到过这个问题
有没有一种方法可以使此表达式或正则表达式编译成我忘记或还没有学会的表达式?如果您使用的是Python 2.x,您应该确保指定的是unicode字符串(带有u'',或内置的unicode):
>>r=re.compile(u'[\u0020-\uD7FF]')
>>>r.search(u'foo\uD7F0 bar')
r、 搜索(u“”)
使用原始字符串(与r“”一样)会得到由“仰泳”+字母“u”加上数字0+组成的(ascii)字符串…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
\uxxx
或\uxxxxx
,因此它被解析为“\u00d7
,f
,f
”
\U0000d7ff
将修复它:
>>> re.compile(ur'[\u0020-\ud7ff]', re.DEBUG)
in
range (32, 55295)
它在这里编译得很好(2.6.5)你是对的-确实可以编译-我假设这是我正在处理的正则表达式中出现问题的部分。我将发布引起我问题的部分。非常感谢-我不知道所有unicode的东西。所以,它必须是4位小写字母“u”和8位大写字母“u”,对吗?请注意,这个答案是在Python2的上下文中给出的。在Python3中,
r“example”
和ur“example”
之间没有区别。当\u的长度不足以达到4时,是否需要“0”字符?就像一个空格,你只有\u20,但你必须写\u0020?,对吗?我知道你已经得到了回答,但是是的,没错:)完整的Unicode呢?例如,哥特式区块从U+10330哥特式字母AHSA到U+1034A哥特式字母九百,但也包括接下来的五个代码点,目前尚未命名?在Python中,您如何表达其他编程语言允许您使用的\p{Gothic}
,\p{Script=Gothic}
,\p{InGothic}
,或\p{Block=Gothic}
?例如,在Perl中,/\pN/&&/\p{InGothic}/
生成U+10341哥特式字母90和U+1034A哥特式字母900。但是,这在Python中不起作用;为什么不呢?如果我理解正确,你可以用大写的U来表示更大的代码点,填充到8个十六进制数字。例如,在您的U+10330示例中,您将使用在Python中不起作用的U'\U00010330'@tchrist;为什么不呢?
Pythonre
模块从未很好地处理过Unicode,尽管第三方regex库()工作得很好。
>>> re.compile(ur'[\u0020-\u00d7ff]', re.DEBUG)
in
range (32, 215)
literal 102
literal 102
>>> re.compile(ur'[\u0020-\ud7ff]', re.DEBUG)
in
range (32, 55295)