从XML文件中读取正则表达式,将它们存储到列表列表中,然后使用它们

时间:2016-06-13 19:02:19

标签: python regex xml list

我想从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?我该如何解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:0)

您正在使用的正则表达式

str(listOfList[0])

将在您的示例中

["r'\\d+\\.\\d+'"]

,字面意思是["r'之前和'"]之后。

str函数将数组格式化为数组的字符串表示形式。

您只希望实际的正则表达式不是字符串表示。

使用

re.findall(listOfList[0][0], my_str)

因为listOfList[0][0]将是\d+\.\d+所需的正则表达式。