因爲有很多表情符號with different unicode values的,你必須在你的正則表達式明確指定,或者如果他們有spesific範圍你可以使用一個字符類。在這種情況下,你的第二個辛博爾是不是一個標準的表情符號,它只是一個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 ']
或者如果你想匹配更emojies你可以使用一個字符範圍(這裏是一個很好的參考,其顯示了不同的emojies 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 ']
你應該看看這個堆棧以獲取表情符號正則表達式http://stackoverflow.com/q/28077049/4639336 – reticentroot
@reticentroot我不認爲它會工作爲utf8表情符號,如「」。 – Delgan
@reticentroot我需要它與unicode表情符號一起工作。 – LeDerp