1

我有一个 XML 字符串

<tags>
   <person1>dave jones</person1>
   <person2>ron matthews</person2>
   <person3>sally van heerden</person3>
   <place>tygervalley</place>
   <ocassion>shopping</ocassion>
</tags>

我想使用“Sally Van Heerden”或“Tygervalley”等搜索词来搜索这个 xml 字符串

使用正则表达式查找此字符串中的术语是否更快,或者 Python 的 find() 方法是否足够快?我也可以使用 python 的元素树 XML 解析器进行搜索,然后构建 XML 树然后搜索它,但我担心它会太慢。

以上三个哪个最快?还有其他建议吗?

请记住,可以输入多个搜索词,并且还将搜索多个(数千个)XML 字符串。

更新:如何将 xml 字符串拆分为列表,删除所有特殊字符,然后将列表转换为一组以及一组搜索词。那么得到两组的交集呢?这会很快吗?

4

2 回答 2

1

正则表达式要经过一个漫长的编译过程,然后按照一组复杂的规则搜索字符串。该find函数一次性遍历字符串。

find如果不需要模式,该功能将提供更好的性能。

于 2012-05-17T21:10:08.727 回答
1

老实说,我认为你必须有一些非常极端的速度要求才能成为你的瓶颈,但即使你这样做了,你可以做出明智决定的唯一方法就是测试

这是一个开始,使用find/搜索该字符串以re.findall获得一个字符串。我怀疑这是否代表您的用例,但您需要确定您将运行哪些查询并测试这些查询。

% python -mtimeit "'<tags> <person1>dave jones</person1> <person2>ron matthews</person2> <person3>sally van heerden</person3> <place>tygervalley</place> <ocassion>shopping</ocassion> </tags>'.find('tygervalley')"
1000000 loops, best of 3: 0.279 usec per loop

% python -mtimeit "import re; re.findall('tygervalley', '<tags> <person1>dave jones</person1> <person2>ron matthews</person2> <person3>sally van heerden</person3> <place>tygervalley</place> <ocassion>shopping</ocassion> </tags>')"
100000 loops, best of 3: 2.65 usec per loop

就像我说的那样,很难想象这种差异是您程序中最重要的瓶颈。

于 2012-05-17T23:15:38.027 回答