这是有效的r'[A-Za-z0-9]'
,这是r'[0-A]'
- 我想知道这里匹配的是什么字符类。
Python(2.7)re
模块的基础字符表是什么?
[A-Z]
,[a-z]
,[0-9]
是引用单独的表还是单个整个索引表,例如ASCII?什么定义了要使用的字符表?
我要求了解潜在的机制。
答案 0 :(得分:3)
你为什么不试试?
>>> import re
>>> p = r'[0-A]'
>>> s = ''.join(chr(i) for i in range(256))
>>> ''.join(re.findall(p, s))
'0123456789:;<=>?@A'
>>> p = r'[0-Z]'
>>> ''.join(re.findall(p, s))
'0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ'
答案 1 :(得分:0)
字符范围将基于ASCII或Unicode,具体取决于Python的版本和字符串的类型。如果您查找字符值,您会看到'9'
和'A'
之间存在大量字符,这些字符将包含在您可能不想要的内容中。
>>> r = re.compile('[0-A]')
>>> r.match('0')
<_sre.SRE_Match object at 0x025E8640>
>>> print r.match('0')
<_sre.SRE_Match object at 0x025E85D0>
>>> print r.match('9')
<_sre.SRE_Match object at 0x025E85D0>
>>> print r.match('A')
<_sre.SRE_Match object at 0x025E85D0>
>>> print r.match('Z')
None
>>> print r.match('-')
None
>>> print r.match(':')
<_sre.SRE_Match object at 0x025E85D0>
答案 2 :(得分:0)
默认情况下,在Python 2中,模型是ASCII,但假设它可能很危险(它在启动文件中设置)。 A-Z等不是不同的集合,它们只是常用的集合,尽管字符类中的正确术语。
例如,最好使用多个范围[0-9a-x]
。
[0-A]
是有效的,但也会包含一堆标点符号字符,并且可能会让人们对阅读代码的人感到困惑。
不要将此与\w
等类混淆,这些类可能会根据标记设置而改变。