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

LeD*_*erp 6 python regex unicode emoji

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

示例文本:

blah xzuyguhbc ibcbb bqw 2 extract1  ?? jbjhcb 6 extract2  bjvcvvv
Run Code Online (Sandbox Code Playgroud)

输出:

extract1
extract2
Run Code Online (Sandbox Code Playgroud)

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

(?<=[\s][\d])(.*?)(?=[\d])
Run Code Online (Sandbox Code Playgroud)

请建议一个python友好的方法,我需要它与所有表情符号一起使用不仅是示例中给出的那个

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

Kas*_*mvd 6

由于有很多具有不同 unicode 值的表情符号,您必须在正则表达式中明确指定它们,或者如果它们具有特定范围,您可以使用字符类。在这种情况下,您的第二个 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 ']
Run Code Online (Sandbox Code Playgroud)

或者,如果您想匹配更多表情符号,您可以使用字符范围(这里有一个很好的参考,它显示了不同表情符号的正确范围 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 ']
Run Code Online (Sandbox Code Playgroud)

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

这是另一个例子:

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 ']
Run Code Online (Sandbox Code Playgroud)