我有一个XML字符串
<tags>
<person1>dave jones</person1>
<person2>ron matthews</person2>
<person3>sally van heerden</person3>
<place>tygervalley</place>
<ocassion>shopping</ocassion>
</tags>
我想使用搜索字词搜索此xml字符串,例如“Sally Van Heerden”或“Tygervalley”
使用正则表达式查找此字符串中的术语或Python的find()方法是否足够快?我也可以使用元素树XML解析器搜索python,然后构建XML树然后搜索它,但我担心它会太慢。
以上三种中哪一种最快? 还有其他建议吗?
请记住,可以输入多个搜索字词,还会搜索多个(数千个)XML字符串。
更新:如何将xml字符串拆分为列表,删除所有特殊字符,然后将列表转换为集合以及一组搜索术语。然后得到两组的交集?这会很快吗?
答案 0 :(得分:1)
正则表达式经过漫长的编译过程,然后按照一组复杂的规则搜索字符串。 find
函数一次通过字符串。
如果不需要模式,find
函数将提供更好的性能。
答案 1 :(得分:1)
老实说,我认为你必须要有一些非常极端的速度要求才能成为你的瓶颈,但即使你这样做,唯一能做出明智决定的方法就是测试< / em>的。
这是一个开始,使用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
就像我说的那样,很难想象这种差异是你节目中最重要的瓶颈。