【问题标题】:Reading regular expressions from a XML file, store them into a list of list and afterwards use them从 XML 文件中读取正则表达式,将它们存储到列表中,然后使用它们
【发布时间】:2016-06-13 19:02:18
【问题描述】:

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

谢谢。

【问题讨论】:

  • 什么是listOfRegex?你引入了变量但没有定义它。
  • 编辑您的帖子以添加所有必要的元素以了解您的问题并进行测试。另一个示例,字段标记不会出现在您的 xml 字符串中。显示更多 xml。简而言之,在问题本身中添加重现 [问题] 所需的最短代码。
  • 您编写代码的方式使r' 成为正则表达式的一部分。不是。
  • @CasimiretHippolyte 现在更清楚了。
  • @raphv 我删除了r',但现在打印的是['.'],而不是4.0

标签: python regex xml list


【解决方案1】:

你正在使用的正则表达式

str(listOfList[0])

在你的例子中会是

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

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

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

您只需要实际的正则表达式而不是字符串表示。

使用

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

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

【讨论】:

  • 按照@raphv 的建议,我从xml 文件中删除了r'。现在,str(listOfList[0])['\\d+\\.\\d+']。我不明白你的解决方案,我该怎么办?谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 2020-11-20
  • 1970-01-01
  • 2018-12-30
相关资源
最近更新 更多