我有许多列表格式的目录和子目录,我试图只提取我需要的目录和子目录。我从目录repo / bob / ebb中的一系列xml文件开始。我想在以下目录中专门定位文件:其中短划线表示任何字符:
repo / bob / ebb / bb - / nr / dl - - - - - - - - - - - / [递归中此目录中的每个xml]
repo / bob / ebb / bb ---- / nr / dl - - - - - - - - - - - / [递归此目录中的每个xml]
为了做到这一点,我提出了以下代码,但我收到了语法错误。我昨天开始学习正则表达式,可能没有抓到什么,但这是我的尝试。任何帮助将不胜感激。提前谢谢。
import glob
import re
import os
x = glob.glob('/repo/bob/ebb/*/nr/*/*/*/*/test_suites.xml')
print x
for y in x:
if re.search(r'/repo/bob/ebb/bb\+{2,4}/nr/dl\.+',y)
print y
ps我意识到我正在使用glob并且可以使用'+',但我想将正则表达式合并到此中。
我在搜索行遇到“语法无效”,所以我做错了,只是不确定它是什么。再次感谢
答案 0 :(得分:1)
试试这个:
"repo/bob/ebb/bb.{2,4}/nr/dl.+/.+\.xml"
反斜杠(\)是正则表达式中的转义字符。你有\ +,这实际上是说你想要一个文字'+'字符。相反,你想使用'。'匹配任何角色。 {2,4}表示它发生在2到4次之间。然后在最后,你有一个\。+,它应该只是一个。+。同样,反斜杠正在逃避期间,因此您说您想要一个或多个期间。相反,你想说一个或多个“任何”字符。
我曾多次使用有用的网站来测试正则表达式https://www.regexpal.com。它允许您动态地使用正则表达式并使用测试字符串直观地查看匹配内容和不匹配内容。