Python [^[:print:]和[[:cntrl:]之间有区别吗

Python [^[:print:]和[[:cntrl:]之间有区别吗,python,regex,Python,Regex,试图确定上述POSIX字符组之间是否存在功能差异,或者更具体地说,以下两种模式之间是否存在功能差异: r'[^[\x20-\x7E]]' # Match All non-printable r'[\x00-\x1F\x7F]' # Match control characters 我不确定POSIX组(Python的正则表达式引擎无论如何都不支持它们),但是 是绝对错误的(应该是r'[^\x20-\x7E]'),并且匹配的远远超过 r'[\x00-\x1F\x7F]' 因为后者只考虑A

试图确定上述POSIX字符组之间是否存在功能差异,或者更具体地说,以下两种模式之间是否存在功能差异:

r'[^[\x20-\x7E]]'  # Match All non-printable
r'[\x00-\x1F\x7F]'  # Match control characters 

我不确定POSIX组(Python的正则表达式引擎无论如何都不支持它们),但是

是绝对错误的(应该是
r'[^\x20-\x7E]'
),并且匹配的远远超过

r'[\x00-\x1F\x7F]'
因为后者只考虑ASCII字符,而前者也将匹配代码点126以上的任何字符:

>>> r1 = re.compile(r'[^\x20-\x7E]')
>>> r2 = re.compile(r'[\x00-\x1F\x7F]')
>>> r1.match("ä")
<_sre.SRE_Match object; span=(0, 1), match='ä'>
>>> r2.match("ä")
>>>

这就是我一直在寻找的答案!谢谢。你知道
[^\x20-\x7E]
[^[\x20-\x7E]]
之间的区别吗?我不确定我是否理解字符集的嵌套。@kevins:在Python中不能嵌套字符集。有一些正则表达式风格支持字符集减法,如
[a-z-[aeiou]]
(将匹配除元音以外的所有字母),但Python不在其中。再次感谢,非常有用。我想我们可以像Python一样使用“Regex-从学徒到大师”:
>>> r1 = re.compile(r'[^\x20-\x7E]')
>>> r2 = re.compile(r'[\x00-\x1F\x7F]')
>>> r1.match("ä")
<_sre.SRE_Match object; span=(0, 1), match='ä'>
>>> r2.match("ä")
>>>
>>> r1 = re.compile(r'[^[\x20-\x7E]]')
>>> r1.match("\x00")
>>> r1.match("\x00]")
<_sre.SRE_Match object; span=(0, 2), match='\x00]'>