不平衡括号正则表达式

unbalanced parenthesis regex

!pip install emot
from emot.emo_unicode import EMOTICONS_EMO
def convert_emoticons(text):
    for emot in EMOTICONS_EMO:
        text = re.sub(u'\('+emot+'\)', "_".join(EMOTICONS_EMO[emot].replace(",","").split()), text)
        return text

text = "Hello :-) :-)"
convert_emoticons(text)

我正在尝试 运行 在 google collab 中使用上述代码,但出现以下错误:unbalanced parenthesis at position 4

我对 re 模块 documentation 的理解表明 '\(any_expression'\)' 是正确的使用方法,但我仍然遇到错误。所以,我已经尝试将 '\(' + emot + '\) 替换为:

  1. '(' + emot + ')',它给出了同样的错误
  2. '[' + emot + ']',它给出以下输出:Hello Happy_face_or_smiley-Happy_face_or_smiley Happy_face_or_smiley-Happy_face_or_smiley

text = "Hello :-) :-)"

的正确输出应该是 Hello Happy_face_smiley Happy_face_smiley

有人可以帮我解决这个问题吗?

使用正则表达式非常棘手,因为您首先需要转义表情符号中包含的正则表达式中的元字符,例如:)和 :(,这就是你得到不平衡括号的原因。所以,你需要先做这样的事情:

>>> print(re.sub(r'([()...])', r'%s' % '\\', ':)'))
:\)

但我建议您直接进行替换,因为您已经有了一个要遍历它的映射。所以我们有:

from emot.emo_unicode import EMOTICONS_EMO
def convert_emoticons(text):
    for emot in EMOTICONS_EMO:
        text = text.replace(emot, EMOTICONS_EMO[emot].replace(" ","_"))
    return text


text = "Hello :-) :-)"
convert_emoticons(text)
# 'Hello Happy_face_smiley Happy_face_smiley'