加快字符串列表中的re.match()?

时间:2018-02-04 06:23:05

标签: python regex

假设s是一长串字符串。我想提取列表中与正则表达式匹配的元素的索引。但是当列表很长时,运行时可能很慢。有没有办法加快搜索速度?

regex = re.compile('^x.*$')
result = [i for i,v in enumerate(s) if regex.match(v)]

2 个答案:

答案 0 :(得分:0)

如果你要做的就是检查字符串是否以“x”开头,你可以使用startswith

result = [i for i, v in enumerate(s) if v.startswith("x")]
$ python -m timeit -n 1000 -s 'import re; regex = re.compile("^x.*$");' '[i for i,v in enumerate(["xax", "y", "xaff"]) if regex.match(v)]'
1000 loops, best of 3: 1.62 usec per loop
$ python -m  timeit -n 1000 '[i for i, v in enumerate(["xax", "y", "xaff"]) if v.startswith("x")]'
1000 loops, best of 3: 1.17 usec per loop

答案 1 :(得分:0)

将列表拆分为块并使用python多处理或多线程。找到每个块的匹配索引,并将每个块的开头索引添加到匹配项中,以便最终索引与列表中的整体索引匹配。