2016-08-24 7 views
1

小さなPython関数を作成して、中国語で書かれた文字列から望ましくない要素を削除しました。 これらの望ましくない要素は、先頭にアンパサンドを表示します(& Something)。 この関数は正規表現を使用してそれらを見つけ出し、それらを削除し、望ましくない要素のない文字列の最も長い部分を返しますが、何らかの理由で期待どおりに機能しません。 私は他の言語やアルファベットで文字列の関数をテストし、期待どおりに動作します。出力だ正規表現が中国語のテキストで使用されていない場合

# -*- coding: utf-8 -*- 

import re 

def clean_sentence(my_text): 
    split_the_text = re.split(r'([&].*?\s)', my_text) 
    longest_sentence = max(split_the_text, key=len) 

    return longest_sentence 

my_string = "一个神奇的鸭子飞在与&SOMETHING然后唱支歌给&PERSON" 
print clean_sentence(my_string) 

õ©Çõ©¬þÑ×ÕÑçþÜäÚ©¡Õ¡ÉÚú×Õ£¿õ©Ä&SOMETHINGþäÂÕÉÄÕö▒µö»µ¡îþ╗Ö&PERSON 
+1

だから何*は起こるのでしょうか?代わりに何が起こると思いますか? –

+0

また、あなたの例は名前エラーを投げます: 'split_the_copy'が設定されていません。 'my_string'はバイトストリングです。テキストをエンコードするためにどのコーデックが使用されたかは重要です。おそらく 'print repr(my_string)'出力を与えることができるので、そこに含まれるバイトをよりよく判断することができます。 –

+0

本当にすみません、私はそれを修正しました! ゴールについて:文字列は、望ましくない要素のない文字列の最長部分を返さなければなりません。 – fghersi

答えて

1

非常にシンプル: そこには空白がありませんが、あなたは1が必要です。あなたのSOMETHINGPERSONは英語の文字や数字だけであれば、あなたは一緒に取得することができるかもしれない:

import re 
def clean_sentence(my_text): 
    split_the_text = re.split(r'&\w+', my_text) 
    longest_sentence = max(split_the_text, key=len) 

    return longest_sentence 

my_string = "一个神奇的鸭子飞在与&SOMETHING然后唱支歌给&PERSON" 
print(clean_sentence(my_string)) 
# 一个神奇的鸭子飞在与 
+0

私のコード(私は正規表現と仮定しています)の間違いを修正してください。 – fghersi

関連する問題