我想从XML文件中读取许多正则表达式,将它们存储到列表列表中并使用它们。我的解决方案不起作用,我不知道为什么。
假设我有一个XML,其中包含我要存储在列表列表中的正则表达式。 XML是这样的:
<?xml version="1.0" encoding="ISO-8859-1"?>
<my_xml>
<field>
<regex>\d+\.\d+</regex>
</field>
<field>
<regex>\d+</regex>
</field>
</my_xml>
所以,我逐行阅读XML文件,并构建包含所有正则表达式的列表列表:
tree = ET.parse("./my_file.xml")
root = tree.getroot()
listOfList = []
for field in root.findall('field'):
tmp = []
regex = str(field.find('regex').text)
tmp.append(regex)
listOfList.append(tmp)
现在,包含我的正则表达式的列表列表已准备就绪。事实上,如果我打印listOfList
我得到:
[['\\d+\\.\\d+'], ['\\d+']]
现在,是时候使用包含两个正则表达式的列表列表了。假设我有一个包含ver=4.0
的字符串,我只想获得4.0
。为此,我使用listOfList[0]
中包含的正则表达式。代码如下:
my_str = "ver=4.0"
print re.findall(str(listOfList[0]), my_str)
.....但如果我这样做,python打印出['.']
。
为什么python打印出['.']
而不是4.0
?我该如何解决这个问题?
感谢。
答案 0 :(得分:0)
您正在使用的正则表达式
str(listOfList[0])
将在您的示例中
["r'\\d+\\.\\d+'"]
,字面意思是["r'
之前和'"]
之后。
str
函数将数组格式化为数组的字符串表示形式。
您只希望实际的正则表达式不是字符串表示。
使用
re.findall(listOfList[0][0], my_str)
因为listOfList[0][0]
将是\d+\.\d+
所需的正则表达式。