我收到这样的短信:
`D:\Programming\sit\bin\MyLab.json`
它可能包含不同类型的引号,也可能不包含它们。如果存在引号,则严格将其放置在文本的开头和结尾处,以环绕路径。但文本肯定包含文件的绝对 Windows 路径。但该文件也可能不存在。我正在努力编写提取路径的算法。
我尝试过正则表达式,例如:
re.findall(r'[a-zA-Z]:\\((?:[a-zA-Z0-9() ]*\\)*).*', a)
但我收到:
['Programming\\sit\\bin\\']
但我希望获得类似路径的字符串:
D:\Programming\sit\bin\MyLab.json
您将捕获组放置在错误的位置。正则表达式
([a-zA-Z]:\\(?:[\w ]*\\)*[\w \.]*)
适用于您的示例。但是,使用此方法提取路径是一个坏主意,因为文件名的有效字符集很大。您可以考虑以不同的方式解析您的文件。
这只是一个想法,但如果您确定该路径始终是绝对 Windows 路径,并且引号(如果存在)始终匹配,那么也许没有必要使用 Regex?相反,只需检查第一个字符是否是字母表(卷字母),如果不是,则删除第一个和最后一个字符?就像是:
我会以不同的方式处理这个问题,而是尝试返回评论中建议的
pathlib
实例编辑:这确实是现在接受的答案的更仔细的版本,根据您的用例,这可能或多或少是可取的