正则表达式在中文文本上使用时不起作用

问题描述:

我创建了一个小型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

很简单: 没有空格,但你需要一个。如果您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