问题描述
我正在尝试使用re.findall创建文件路径的子字符串,该子字符串仅给我第一个反斜杠之前的部分。 这是os.walk的for循环的一部分,由于re.findall,我正在尝试获取根目录的第一部分。
folder="Q:\\test\\test.gdb"
for root,dirs,files in os.walk(folder):
Quelle=re.findall('(.+?)\\',root)
但是,这会产生错误:假冒逸出(行尾)。据我了解,之所以会产生此错误,是因为我在行尾使用了转义字符。但是,在我的代码示例中,它不是在行尾吗?根据我的理解,我必须使用它来转义反斜杠,以便我的字符串包括直到第一个反斜杠为止的所有路径。有什么办法解决吗? 当我使用
folder="Q:\\test\\test.gdb"
for root,files in os.walk(folder):
Quelle=re.findall('(.+?):',root)
我正确获取了字符串['Q']
的列表。但是我想在字符串中包含:
。
解决方法
错误来自re
,而不是解释程序。
反斜杠在正则表达式中也具有转义符的含义。例如,r'\.'
是一个字面量,而不是像'.'
那样代表所有字符的类。因此,需要在正则表达式级别再次再次对文字反斜杠进行转义。
您必须继续前进:
- 将反斜杠加倍:
'(.+?)\\\\'
- 执行相同的操作,但是使用原始字符串使其看起来更好:
r'(.+?)\\'
不要难过。官方教程中甚至有一个专门的章节称为"The Backslash Plague",专门处理这种情况。
您还可以在official docs中搜索特殊字符列表以获取更多信息。