跟着this question,我在想下面的函数是否足够检查没有意外的顺序反斜杠字符已经输入到一个路径中导致产生“特殊字符”。更清楚的是,\b
是一个退格,而\
后面跟着一个数字,起源于一些ascii字符代码。我想避免这种情况。还有像\d
这样的序列没有特殊含义,显然在这种情况下,\
会自动转义。我并不担心这一点。这里是我的功能:在路径字符串中正确转义检查反斜杠
def checkPathString(dir):
slash = False
for c in repr(dir):
if c == '\\':
slash = not slash
else:
if slash:
raise ValueError('Path contains unescaped \\ characters')
它似乎正确地检测\b
或\
后跟数字(如内部表示成为\x
东西)。这也使我发现\f
是一个特殊的序列,也被翻译成\x
东西。
检测为坏的字符串:
"C:\dummy\bar" #Because of "\b"
"C:\dummy\2000" #Because of "\" followed by a number
检测为好字符串:
"C:\dummy\\bar" #\d is escaped automatically because is not a special sequence
"C:\dummy\\2000"
会更好,以检查是否有串(32与127) –
仅ASCII字符什么是你真正想检查?代码无法确定是否有意或故意存在特殊字符。如果你想检查是否存在特殊字符(无论“特殊”的定义是什么),只需要这样做。 – Goyo
@Goyo我编辑了这个问题,试图更好地指定我正在尝试解决的问题。 – Antonio