2016-08-24 1 views
1

작은 파이썬 함수를 만들어 중국어로 작성된 문자열에서 원하지 않는 요소를 제거했습니다. 이러한 원치 않는 요소는 처음에 앰퍼샌드를 사용합니다 (& 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

그래서 *이 * 일이 무엇을 : 당신의 SOMETHING 또는 PERSON는 영어 문자 또는 숫자를하는 경우, 당신은 함께 얻을 수있을 것? 대신에 당신은 무엇을 기대 했습니까? –

+0

또한, 예제에서 이름 오류가 발생합니다 :'split_the_copy'가 설정되지 않았습니다. my_string은 바이트 스트링이다; 텍스트를 인코딩하기 위해 어떤 코덱이 사용되었는지는 중요합니다. 아마도 우리는'print repr (my_string)'출력을 줄 수 있기 때문에 우리는 어떤 바이트가 포함되어 있는지 더 잘 판단 할 수있다. –

+0

정말 미안 해요. 목표 정보 : 문자열은 원하지 않는 요소없이 문자열의 가장 긴 부분을 반환해야합니다. – fghersi

답변

1

매우 간단 : 아무 공백이 없지만 하나가 필요합니다.

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

관련 문제