2017-05-11 30 views
1

私はすべての絵文字を削除しようとしています。絵文字からマカオの絵文字フラグを削除します。私はemojiライブラリからいくつかの標準正規表現と正規表現を試しましたが、それを削除することはできません。 マイコード:Pythonのテキストから絵文字フラグを削除する

def remove_emoji(text): 
    emoji_pattern = re.compile(
     u"(\ud83d[\ude00-\ude4f])|" # emoticons 
     u"(\ud83c[\udf00-\uffff])|" # symbols & pictographs (1 of 2) 
     u"(\ud83d[\u0000-\uddff])|" # symbols & pictographs (2 of 2) 
     u"(\ud83d[\ude80-\udeff])|" # transport & map symbols 
     u"(\ud83c[\udde0-\uddff])" # flags (iOS) 
     "+", flags=re.UNICODE) 
    return emoji_pattern.sub('', text) 
+0

私はおそらくこのコードをPython 2から移植していますか? –

答えて

0

あなたのパターンは、あなたがターゲットとしているフラグ絵文字(およびおそらく他のグリフ)を示すためではないようです。

def remove_emoji(text): 
    emoji_pattern = re.compile(
     u'(\U0001F1F2\U0001F1F4)|'  # Macau flag 
     u'([\U0001F1E6-\U0001F1FF]{2})|' # flags 
     u'([\U0001F600-\U0001F64F])'  # emoticons 
     "+", flags=re.UNICODE) 

    return emoji_pattern.sub('', text) 

注資本-U(\U)エスケープ意味32ビット進値:

例えば、フラグを削除します。フラグと絵文字はの方法のUnicodeの高い値になります。また、フラグは2つのコードポイントの組み合わせであるため、特に複雑に見えます。適切な文字をターゲットに設定したら(キャラクターセットで拡張することができます)、Regional Indicator Symbolsのすべてのペアの式で示されます。

また、他の絵文字や記号の説明では、ここでは基本的な顔文字ブロックのために行わたとえば上記の定義に

:。

flag = '\U0001F1F2\U0001F1F4' 
emote = '\U0001F620' 
​ 
print("flag: {!r} gone: {!r}".format(flag, remove_emoji(flag))) 
print("emote: {!r} gone: {!r}".format(emote, remove_emoji(emote))) 

収量:

flag: '' gone: '' 
emote: '' gone: '' 

これは、対象とする他のブロックでさらに拡張できます。 32ビットの表記法を探して、個別に調べることをお勧めします。あなたはよくそれらが書かれたのを見ることに注意してください。U+1Fxyz;これらは、Pythonの場合は\U0001Fxyzとする必要があります。すべての記号( "すべての絵文字")を削除したい場合は、幅広い文字セットを使用できます。しかし、あなたが正確であり、限られたシンボルセットだけを削除したい場合は、気をつけて使う必要があります。ターゲティングするセットの1つ(Transport and Map Symbolsなど)は、5つの独立した範囲で構成され、完全な絵文字セットに重複しています。

1

これは自己宣伝のようなものですが、私はそれを(他のものの中でも)行うことができるPythonライブラリを持っています。ライブラリはcuccoで、基本的にはあなたのようなものだろう:これはあなたのために完璧に動作しますが、あなたはそれを試してみると、私は結果を知っていることができればいいだろう場合

from cucco import Cucco 
cucco = Cucco() 
cucco.replace_emojis('Your text') 

わからないが。

関連する問題