python - 在 python 正则表达式中匹配 unicode 表情符号

标签 python regex unicode emoji

我需要提取文本中数字和表情之间的文字

示例文本:

blah xzuyguhbc ibcbb bqw 2 extract1  ☺️ jbjhcb 6 extract2 🙅 bjvcvvv

输出:

extract1
extract2

我编写的正则表达式代码提取了 2 个数字之间的文本,我需要更改它识别 unicode 表情符号字符的部分并提取它们之间的文本。

(?<=[\s][\d])(.*?)(?=[\d])

请推荐一个 python 友好的方法,我需要它来处理所有的表情符号,而不仅仅是示例中给出的表情符号

https://regex101.com/r/uT1fM0/1

最佳答案

因为有很多表情符号with different unicode values ,您必须在正则表达式中明确指定它们,或者如果它们具有特定范围,您可以使用字符类。在这种情况下,您的第二个 simbol 不是标准表情符号,它只是一个 unicode 字符,但由于它大于 \u263a(☺️ 的 unicode 表示),您可以将它放在 的范围内\u263a:

In [71]: s = 'blah xzuyguhbc ibcbb bqw 2 extract1  ☺️ jbjhcb 6 extract2 🙅 bjvcvvv'

In [72]: regex = re.compile(r'\d+(.*?)(?:\u263a|\U0001f645)')

In [74]: regex.findall(s)
Out[74]: [' extract1  ', ' extract2 ']

或者,如果您想匹配更多表情符号,您可以使用字符范围(这里有一个很好的引用,它向您展示了不同表情符号的正确范围 http://apps.timwhitlock.info/emoji/tables/unicode ):

In [75]: regex = re.compile(r'\d+(.*?)[\u263a-\U0001f645]')

In [76]: regex.findall(s)
Out[76]: [' extract1  ', ' extract2 ']

请注意,在第二种情况下,您必须确保上述范围内的所有字符都是您想要的表情符号。

这是另一个例子:

In [77]: s = "blah 4 xzuyguhbc 😺 ibcbb bqw 2 extract1  ☺️ jbjhcb 6 extract2 🙅 bjvcvvv"

In [78]: regex = re.compile(r'\d+(.*?)[\u263a-\U0001f645]')

In [79]: regex.findall(s)
Out[79]: [' xzuyguhbc ', ' extract1  ', ' extract2 ']

关于python - 在 python 正则表达式中匹配 unicode 表情符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39536390/

相关文章:

具有不同参数大小的 Python 函数指针

regex - 带括号的电话号码的 HTML5 模式

mysql - 如何将此正则表达式转换为 mysql posix

Perl LWP::UserAgent 错误处理 UTF-8 响应

php - 您将如何创建所有 UTF-8 字符的字符串?

python - 将列表或系列作为一行 append 到 pandas DataFrame?

python - 使用pipeline时为什么不改造X_test

python - 如何在 folium 贴图中添加颜色贴图的背景颜色

java - 正则表达式仅包含数字且不包含仅 0

c++ - Windows:UTF-16BE 到 UTF-8