Python 查看文件路径是否与特定模式匹配的正则表达式
我有一个文件路径列表Python 查看文件路径是否与特定模式匹配的正则表达式,python,regex,Python,Regex,我有一个文件路径列表 l = ['C:\\src\\main\\webapp\\WEB-INF\\flows\\gestionCompteBo\\saisie\\saisieCompteBo-flux.xml', 'C:\\src\\main\\webapp\\WEB-INF\\flows\\recherche-flux.xml', 'C:\\src\\main\\webapp\\WEB-INF\\flows\\gestionCompteBo\\import\\import
l = ['C:\\src\\main\\webapp\\WEB-INF\\flows\\gestionCompteBo\\saisie\\saisieCompteBo-flux.xml',
'C:\\src\\main\\webapp\\WEB-INF\\flows\\recherche-flux.xml',
'C:\\src\\main\\webapp\\WEB-INF\\flows\\gestionCompteBo\\import\\import-flux.xml',
'C:\\src\\main\\webapp\\WEB-INF\\gestionCompteBo-flux.xml',
'C:\\src\\main\\webapp\\WEB-INF\\flows\\gestionCompte\\gestionCompte-flux.xml',
'C:\\src\\main\\webapp\\WEB-INF\\flows\\gestionCommunication\\tableauDeBord\\tableauDeBord.xml']
我需要获取与模式匹配的文件路径
pattern = '\\WEB-INF\\flows\\**\\*-flux.xml'
其中,**
描述了文件夹/目录的递归深度。
*
可能只描述一个文件夹深度。
如何编写正则表达式来获取与此模式匹配的文件路径?如果只有一个*
,我如何概括
预期产出应为
['C:\\src\\main\\webapp\\WEB-INF\\flows\\gestionCompteBo\\saisie\\saisieCompteBo-flux.xml',
'C:\\src\\main\\webapp\\WEB-INF\\flows\\gestionCompteBo\\import\\import-flux.xml',
您的模式可以轻松转换为正则表达式:
r'\\WEB-INF\\flows\\.*\\.*-flux\.xml'
- 保护斜杠的原始前缀
- 使用
\\\.\\\\
- 选择以
结尾的任何内容(请注意flux.xml
的保护)。不需要过滤掉反斜杠或使用非贪婪,因为计算是从左到右进行的
import re
l = ['C:\\src\\main\\webapp\\WEB-INF\\flows\\gestionCompteBo\\saisie\\saisieCompteBo-flux.xml',
'C:\\src\\main\\webapp\\WEB-INF\\flows\\recherche-flux.xml',
'C:\\src\\main\\webapp\\WEB-INF\\flows\\gestionCompteBo\\import\\import-flux.xml',
'C:\\src\\main\\webapp\\WEB-INF\\gestionCompteBo-flux.xml',
'C:\\src\\main\\webapp\\WEB-INF\\flows\\gestionCompte\\gestionCompte-flux.xml',
'C:\\src\\main\\webapp\\WEB-INF\\flows\\gestionCommunication\\tableauDeBord\\tableauDeBord.xml']
result = [x for x in l if re.search(r'\\WEB-INF\\flows\\.*\\.*-flux.xml',x)]
结果:
>>> result
['C:\\src\\main\\webapp\\WEB-INF\\flows\\gestionCompteBo\\saisie\\saisieCompteBo-flux.xml',
'C:\\src\\main\\webapp\\WEB-INF\\flows\\gestionCompteBo\\import\\import-flux.xml',
'C:\\src\\main\\webapp\\WEB-INF\\flows\\gestionCompte\\gestionCompte-flux.xml']
将
glob.glob
与pattern='\WEB-INF\flows\***-flux.xml'
一起使用,这将work@Jean-弗朗索瓦·法布:glob
在实际目录上工作,而不是在字符串上。请展示您已经尝试过的内容。是的。XY问题太快:)我得到['C:\\src\\main\\webapp\\WEB-INF\\flows\\gestionCompteBo\\saisie\\saisieCompteBo flux.xml','C:\\src\\main\\webapp\\WEB-INF\\flows\\gestionCompteBo\\import\\import flux.xml','C:\\src\\main\\webapp\\WEB-INF\\flows\\gestionCompte\\gestionCompte flux.xml']
与过滤器匹配*与普通的*
相比,它不是*
,而是*
。不,贪婪与此无关,因为当模式在路径中不使用***
时,您仍然希望只匹配非路径组件。@MartijnPieters我认为OP在路径中没有*
。这只是一个通配符=>regex转换的问题。我之所以提到贪婪,是因为如果你使用r'\\WEB-INF\\flows\\.\.\.\.*.-flux\.xml'
,那么它也会起作用。。。但是在文件名的开头有一个额外的要求,比如r'\\WEB-INF\\flows\\\\.\\\\\\\\\\\\gestion.*-flux\.xml'
,它不会这样做。是的,准确地说,*-flux.xml
在一般情况下被正确地翻译成[^\\\\]*-flux\.xml
,例如在匹配\\WEB-INF\\flows\\\\\\*.xml
时,或\\**\\flows\\*-flux\.xml
。请注意后者如何也使用**
,但不应与任何更深层次的手势*
目录匹配!