gpt4 book ai didi

python - 将字典中的所有替换正则表达式应用到给定文本的最快方法

转载 作者:行者123 更新时间:2023-12-01 09:08:37 25 4
gpt4 key购买 nike

我有一个形式为(regexp,substitution_string)的字典,我想将此字典中的所有正则表达式应用于文本(操作顺序无关紧要)。现在我有一些类似的事情:

EMOTICON_REGEXPS = {
r'(:D|;D|:-D|;-D|<3|:\*)': ' EMOJIPOS ',
r'[:|;]?(\))\1+': ' EMOJIPOS ',
r'[:|;]?(\()\1+': ' EMOJINEG ',
}

def replace_emoticons(text):
text_no_emoticons = text
for (regexp, emoticon) in EMOTICON_REGEXPS_:
text_no_emoticons = re.sub(regexp, emoticon, text_no_emoticons)
return text_no_emoticons

有没有更快/更短的方法来做同样的事情?我也知道

reduce(lambda t, (regex, emoticon): re.sub(regex, emoticon, t), 
EMOTICON_REGEXPS, text)

但这似乎并没有更快。

最佳答案

您可以将所有正则表达式合并为一个,并在一次调用 re.sub 中执行所有替换(使用 function 作为替换),而不是在循环中多次执行:

import re
EMOTICON_REGEXPS = {
r':D|;D|:-D|;-D|<3|:\*': ' EMOJIPOS ',
r'[:|;]?\)+': ' EMOJIPOS ',
r'[:|;]?\(+': ' EMOJINEG ',
}
emojis = EMOTICON_REGEXPS.values()
def replace_emoticons(text):
def replace(m):
for i in range(len(emojis)):
if m.group(i + 1):
return emojis(i)
return re.sub('|'.join('({})'.format(r) for r in EMOTICON_REGEXPS), replace, text)

关于python - 将字典中的所有替换正则表达式应用到给定文本的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51843263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com