2016-09-16 113 views
5

我需要提取的數和表情符號之間的文本在文本匹配的unicode表情符號

示例文本:

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

輸出:

extract1 
extract2 

正則表達式的代碼我寫了兩個數字之間的文本,我需要更改它標識unicode表情符號的部分並提取它們之間的文本。

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

請建議蟒蛇友好的方法,我需要它來與所有的表情符號的作品不僅在例子中的一個的

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

+0

你應該看看這個堆棧以獲取表情符號正則表達式http://stackoverflow.com/q/28077049/4639336 – reticentroot

+0

@reticentroot我不認爲它會工作爲utf8表情符號,如「」。 – Delgan

+0

@reticentroot我需要它與unicode表情符號一起工作。 – LeDerp

回答

2

因爲有很多表情符號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 '] 
+0

我需要它與所有表情符號一起工作,不僅僅是示例中給出的表情符號 – LeDerp

+0

@LeDerp正如我所提到的,在這種情況下,您必須使用字符範圍。 – Kasramvd

0

因此,這可能是或不是取決於你的工作需要。如果您提前知道表情符號的時間,但這可能會起作用,您只需要預期表情符號類型的列表。

無論如何沒有更多的信息,這是我會做的。

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import re 

my_regex = re.compile(r'\d\s*([^☺️|^]+)') 

string = "blah xzuyguhbc ibcbb bqw 2 extract1 ☺️ jbjhcb 6 extract2 bjvcvvv" 

m = my_regex.findall(string) 
if m: 
    print m 
+0

我需要它與所有的表情符號一起工作,不僅僅是例子 – LeDerp

+0

中給出的表情符號然後你需要一個工作列表,每個表情符號的模式是不同的,就像我需要匹配英語中的每個單詞和我需要一個正則表達式來做到這一點。否則,想想另一種模式,也許你知道在數字後面總是一個單詞,那麼你可以說在數字後面接下一個單詞,而不關心表情符號。 – reticentroot

1

這是我的解決方案。不知道它是否可以在任何情況下工作。訣竅是將所有unicode表情符號轉換爲普通文本。這可以通過以下方式完成this post然後,您可以像任何普通文本一樣匹配表情符號。請注意,如果字符串字符串\u\U位於您的搜索文本中,它將不起作用。

示例:將您的字符串複製到一個文件中,我們稱之爲emo。 在終端:

Chip [email protected] 03:24:[email protected] ~: cat emo | python stackoverflow.py 
blah xzuyguhbc ibcbb bqw 2 extract1 \u263a\ufe0f jbjhcb 6 extract2 \U0001f645 bjvcvvv\n 
------------------------ 
[' extract1 ', ' extract2 '] 

哪裏stackoverflow.py文件是:

import fileinput 
a = fileinput.input(); 
for line in a: 
    teststring = unicode(line,'utf-8') 
    teststring = teststring.encode('unicode-escape') 

import re 
print teststring 
print "------------------------" 
m = re.findall('(?<=[\s][\d])(.*?)(?=\\\\[uU])', teststring) 
print m