2016-08-24 52 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

很簡單: 沒有空格,但你需要一個。如果您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