如何检查 Python 正则表达式引擎是否将给定字符视为 'special'?
How to check if a given character is considered as 'special' by the Python regex engine?
有没有简单的方法来验证给定的字符是否具有特殊的正则表达式功能?
当然,我可以在 ['.', "[", "]", etc.]
这样的列表中收集正则表达式字符来检查,但我想还有更优雅的方法。
您可以使用 re.escape
。例如:
>>> re.escape("a") == "a"
True
>>> re.escape("[") == "["
False
思路是,如果一个字符是特殊字符,那么re.escape
returns前面加反斜杠的字符。否则,它 returns 字符本身。
您可以在 all
函数中使用 re.escape
,如下所示:
>>> def checker(st):
... return all(re.escape(i)==i for i in st)
...
>>> checker('aab]')
False
>>> checker('aab')
True
>>> checker('aa.b3')
False
根据 the documentation,re.escape
将(强调我的):
Return string with all non-alphanumerics backslashed; this is useful
if you want to match an arbitrary literal string that may have regular
expression metacharacters in it.
所以它告诉你一个字符是否是一个有意义的字符,而不是它是否是。例如:
>>> re.escape('&') == '&'
False
这对于处理任意字符串很有用,因为它确保所有控制字符都被转义,但不会告诉您实际需要转义哪些字符。在我看来,最简单的方法是在问题中被驳回的方法:
char in set(r'.^$*+?{}[]\| ')
优雅在于旁观者的眼睛,但是(恕我直言)这是最通用的/"timeproof" 检查角色是否被 Python 认为是特殊的方式正则表达式引擎 -
def isFalsePositive(char):
m = re.match(char, 'a')
if m is not None and m.end() == 1:
return True
else:
return False
def isSpecial(char):
try:
m = re.match(char, char)
except:
return True
if m is not None and m.end() == 1:
if isFalsePositive(char):
return True
else:
return False
else:
return True
P.S。 -
isFalsePositive() 检查“.”的特殊情况可能有点矫枉过正。 (点)。 :-)
有没有简单的方法来验证给定的字符是否具有特殊的正则表达式功能?
当然,我可以在 ['.', "[", "]", etc.]
这样的列表中收集正则表达式字符来检查,但我想还有更优雅的方法。
您可以使用 re.escape
。例如:
>>> re.escape("a") == "a"
True
>>> re.escape("[") == "["
False
思路是,如果一个字符是特殊字符,那么re.escape
returns前面加反斜杠的字符。否则,它 returns 字符本身。
您可以在 all
函数中使用 re.escape
,如下所示:
>>> def checker(st):
... return all(re.escape(i)==i for i in st)
...
>>> checker('aab]')
False
>>> checker('aab')
True
>>> checker('aa.b3')
False
根据 the documentation,re.escape
将(强调我的):
Return string with all non-alphanumerics backslashed; this is useful if you want to match an arbitrary literal string that may have regular expression metacharacters in it.
所以它告诉你一个字符是否是一个有意义的字符,而不是它是否是。例如:
>>> re.escape('&') == '&'
False
这对于处理任意字符串很有用,因为它确保所有控制字符都被转义,但不会告诉您实际需要转义哪些字符。在我看来,最简单的方法是在问题中被驳回的方法:
char in set(r'.^$*+?{}[]\| ')
优雅在于旁观者的眼睛,但是(恕我直言)这是最通用的/"timeproof" 检查角色是否被 Python 认为是特殊的方式正则表达式引擎 -
def isFalsePositive(char):
m = re.match(char, 'a')
if m is not None and m.end() == 1:
return True
else:
return False
def isSpecial(char):
try:
m = re.match(char, char)
except:
return True
if m is not None and m.end() == 1:
if isFalsePositive(char):
return True
else:
return False
else:
return True
P.S。 -
isFalsePositive() 检查“.”的特殊情况可能有点矫枉过正。 (点)。 :-)