pytorch 使用正则表达式编译(Python)处理10.000个字符串列表的有效方法

k75qkfdt  于 2022-11-09  发布在  Python
关注(0)|答案(2)|浏览(99)

我得到了一个包含大约10.000个字符串的列表,我想使用正则表达式模式来检测这个列表。当我使用re.compile时,只应用一个正则表达式模式会花费很多时间。Python有什么方法可以让它更快吗?
这里我的代码:

import re

list_of_strings = ["I like to eat meat", "I don't like to eat meat", "I like to eat fish", "I don't like to eat fish"]

outcome = [x for x in list_of_strings if len(re.compile(r"I like to eat (.*?)").findall(x)) != 0]

Out[6]: ['I like to eat meat', 'I like to eat fish']

这里我只使用了4个字符串来演示这个例子。实际上代码应该处理10.000个字符串。
我也可以使用多个处理来解决这个问题,但也许还有另一个解决方案与pytorch,pyspark或其他框架存在。
[编辑]感谢所有的答案。我应该提到,每个字符串都是一篇文章。所以,从regex处理的不仅仅是一句话。
我还想说,这里的正则表达式不是问题所在,所以这不是一个可以讨论的主题。

t98cgbkg

t98cgbkg1#

re.compile设计为只能使用一次。编译一次,然后使用编译过的更有效的正则表达式。

import re

pattern = re.compile(r"I like to eat (.*?)")
list_of_strings = ["I like to eat meat", "I don't like to eat meat", "I like to eat fish", "I don't like to eat fish"]

outcome = [x for x in list_of_strings if pattern.match(x)]

您的示例很好地说明了re.compile()的用法,即当您大量使用regex时。

093gszye

093gszye2#

您也可以考虑循环该列表。

new_list = []
for item in list_of_strings:
    if 'I like to eat' in item:
        new_list.append(item)

相关问题