正则表达式表达式,以查看文件路径是否与特定模式匹配

时间:2019-07-15 11:29:21

标签: 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-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',

1 个答案:

答案 0 :(得分:3)

您的模式可以轻松转换为正则表达式:

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']