使用正则表达式python检测句子中的表情符号

 linxiuying261 发布于 2023-02-10 14:33

这是表情符号列表:http://en.wikipedia.org/wiki/List_of_emoticons 我想形成一个正则表达式,检查句子中是否存在任何这些表情符号.例如,"嘿,我很好:)"或"我生气和悲伤:(但是维基百科上的列表中有很多表情符号,所以想知道如何才能完成这项任务.我是regex的新手.&蟒蛇.

>>> s = "hey there I am good :)"
>>> import re
>>> q = re.findall(":",s)
>>> q
[':']

tobias_k.. 7

我看到了两种解决问题的方法:

    或者,您可以为"通用笑脸"创建正则表达式,并尝试尽可能多地匹配,而不会使其过于复杂和疯狂.例如,你可以说每个笑脸都有某种眼睛,鼻子(可选)和嘴巴.

    或者,如果你想匹配该列表中的每个笑脸(并且没有其他),你可以只拿这些表情符号,逃避任何正则表达式特定的特殊字符,并与那些构建一个巨大的分离.

以下是一些代码,可以帮助您开始使用这两种方法:

# approach 1: pattern for "generic smiley"
eyes, noses, mouths = r":;8BX=", r"-~'^", r")(/\|DP"
pattern1 = "[%s][%s]?[%s]" % tuple(map(re.escape, [eyes, noses, mouths]))

# approach 2: disjunction of a list of smileys
smileys = """:-) :) :o) :] :3 :c) :> =] 8) =) :} :^) 
             :D 8-D 8D x-D xD X-D XD =-D =D =-3 =3 B^D""".split()
pattern2 = "|".join(map(re.escape, smileys))

text = "bla bla bla :-/ more text 8^P and another smiley =-D even more text"
print re.findall(pattern1, text)

两种方法都有优点,缺点和一些一般限制.你总会有误报,就像数学术语一样18^P.在表达式周围放置空格可能会有所帮助,但是你不能匹配表情符号后面的表情符号.第一种方法更强大,并且捕获第二种方法不匹配的表情符号,但只要它们遵循某种模式.您可以对"东方"表情使用相同的方法,但它不适用于严格对称的表情,例如=^_^=,因为这不是常规语言.另一方面,第二种方法更容易扩展新的表情,因为您只需将它们添加到列表中.

1 个回答
  • 我看到了两种解决问题的方法:

      或者,您可以为"通用笑脸"创建正则表达式,并尝试尽可能多地匹配,而不会使其过于复杂和疯狂.例如,你可以说每个笑脸都有某种眼睛,鼻子(可选)和嘴巴.

      或者,如果你想匹配该列表中的每个笑脸(并且没有其他),你可以只拿这些表情符号,逃避任何正则表达式特定的特殊字符,并与那些构建一个巨大的分离.

    以下是一些代码,可以帮助您开始使用这两种方法:

    # approach 1: pattern for "generic smiley"
    eyes, noses, mouths = r":;8BX=", r"-~'^", r")(/\|DP"
    pattern1 = "[%s][%s]?[%s]" % tuple(map(re.escape, [eyes, noses, mouths]))
    
    # approach 2: disjunction of a list of smileys
    smileys = """:-) :) :o) :] :3 :c) :> =] 8) =) :} :^) 
                 :D 8-D 8D x-D xD X-D XD =-D =D =-3 =3 B^D""".split()
    pattern2 = "|".join(map(re.escape, smileys))
    
    text = "bla bla bla :-/ more text 8^P and another smiley =-D even more text"
    print re.findall(pattern1, text)
    

    两种方法都有优点,缺点和一些一般限制.你总会有误报,就像数学术语一样18^P.在表达式周围放置空格可能会有所帮助,但是你不能匹配表情符号后面的表情符号.第一种方法更强大,并且捕获第二种方法不匹配的表情符号,但只要它们遵循某种模式.您可以对"东方"表情使用相同的方法,但它不适用于严格对称的表情,例如=^_^=,因为这不是常规语言.另一方面,第二种方法更容易扩展新的表情,因为您只需将它们添加到列表中.

    2023-02-10 14:35 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有