我有一个形式为reg(regexp,alternation_string)的字典,我想将所有该字典的正则表达式应用于文本(操作顺序无关紧要)。现在,我遵循以下原则:
clf.load('trainingData.yml')
有没有更快/更短的方法来做同样的事情?我也知道
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
但这似乎没有更快。
答案 0 :(得分:1)
您可以将所有正则表达式合并为一个,并在一次调用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)