我是Python新手,也是Regex新手,所以如果这是一个显而易见的问题,请原谅我。我正在使用Python 3.10,并编写了一个函数,目的是遍历用户提供的目录。它将遍历所有子目录,查找存储在其中的XML文件。我针对的目录是来自移动设备的应用程序数据。然后,我希望在恢复的XML上运行Regex搜索,查找长度为32个字母数字字符的XML,并只返回这些行。
当我运行下面的代码时,我得到错误ValueError:无法处理具有已编译模式的标志参数。
import os
import re
import xml.etree.ElementTree as ET
def xml_search(directory):
xml_files = []
for root, dir, files in os.walk(directory):
for file in files:
if file.endswith(".xml")
xml_files.append(os.path.join(root, file))
print("The following XML files have been found.")
print(xml_files)
for xml_file in xml_files:
with open(xml_file, "r") as f:
tree = ET.parse(f)
root = tree.getroot()
strings = []
for string in root.iter():
strings.append(string)
regex = re.compile(r"^[a-zA-Z0-9\-._]{32}$", re.I | re.M | re.S)
return_strings = re.findall(regex, strings, re.I | re.M | re.S)
print(return_strings)
最后的print函数只是在继续使用功能之前进行错误检查,不会出现在最终代码中。|相对于M|re. S是我解决问题的尝试。
我已经确认字符串列表正在从XML文件返回解析后的数据,但无法对它运行regex搜索。
1条答案
按热度按时间3pvhb19x1#
首先,我想把
re.compile
调用移到外循环之外(之前),但问题似乎是,您传递给re.findall
的是一个要搜索的列表,而它应该是一个字符串。由于这个错误和您已经简化了代码的事实(例如,我看不到list
strings
将在哪里使用),因此我不能确定您到底要做什么,但可能是以下内容: