如何避免函数读取转义字符?为何字符串正常但函数调用报错?
问题描述
我有一个存储目录路径的字符串列表,示例如下:
| 'directory path' |
|---|
| 'c:\windows\g\subfolder1' |
| 'c:\windows\g\subfolder2' |
| 'etc' |
该字符串本身有效,打印时显示正常:
print(dir_list[0]) dir_list[0] # 输出结果 c:\windows\g\subfolder Out[1]: 'c:\\windows\\g\\subfolder1'
但将其用于pandas的str.contains()函数时出现错误:
df['directory path'].str.contains(dir_list[0])
错误提示:
error: bad escape \g at position 10
请问为何字符串本身正常,但在函数中使用会报错?如何避免函数读取转义字符?
原因与解决方案
原因
pandas.Series.str.contains()默认将传入的字符串视为正则表达式解析。在正则语法中,\g属于非法的转义序列(合法的\g<数字>用于反向引用分组),但你的路径里的\g只是路径分隔后的普通字符组合,并非正则语法,因此触发转义错误。
而直接打印字符串时,Python仅会将字符串内的\\解析为实际的单个反斜杠\,不会进行正则语法校验,所以显示正常。
解决方案
有两种可靠的处理方式:
禁用正则匹配模式
给str.contains()添加regex=False参数,强制函数将传入内容当作普通文本处理,不再解析正则语法:df['directory path'].str.contains(dir_list[0], regex=False)转义正则特殊字符
如果需要保留正则匹配能力,可以使用re.escape()对路径字符串中的正则特殊字符进行转义,让它们被当作普通字符处理:import re df['directory path'].str.contains(re.escape(dir_list[0]))
内容的提问来源于stack exchange,提问作者Joakim Torsvik
相关产品推荐
相关产品推荐

