Recebo uma mensagem como:
`D:\Programming\sit\bin\MyLab.json`
Pode conter diferentes tipos de citações ou não. As citações, se presentes, são colocadas estritamente no início e no final do texto, envolvendo o caminho. Mas o texto definitivamente contém o caminho absoluto do Windows para um arquivo. Mas este arquivo também pode estar ausente. Estou lutando para escrever um algoritmo que extraia o caminho.
Eu tentei regex como:
re.findall(r'[a-zA-Z]:\\((?:[a-zA-Z0-9() ]*\\)*).*', a)
mas eu recebo:
['Programming\\sit\\bin\\']
Mas espero obter uma string com um caminho como:
D:\Programming\sit\bin\MyLab.json
Você colocou o grupo de captura no lugar errado. Regex
([a-zA-Z]:\\(?:[\w ]*\\)*[\w \.]*)
funciona no seu exemplo .No entanto, extrair o caminho usando este método é uma má ideia, pois o conjunto de caracteres válido para nomes de arquivos é grande. Você pode analisar seu arquivo de uma maneira diferente.
Isso é apenas uma ideia, mas se você tiver certeza de que o caminho sempre será um caminho absoluto do Windows e que as aspas (se presentes) sempre corresponderão, talvez não seja necessário usar Regex? Em vez disso, apenas verifique se o primeiro caractere é um alfabeto (a letra do volume) e retire o primeiro e o último caractere, se não for. Algo como:
Eu faria isso de maneira diferente e tentaria retornar uma
pathlib
instância conforme sugerido em um comentárioEDIT: esta é realmente uma versão mais cuidadosa da resposta agora aceita , que pode ser mais ou menos desejável dependendo do seu caso de uso