2016-10-17 7 views
-2

Python 입문.파이썬에서 특정 문자 뒤에 문자열의 일부를 제거합니다.

라는 단어와 다음과 같은 문자열에서 쉼표 문자 사이의 문자열을 삭제하려면 :

MyString = ' x.ABC AND XYZ, \ny.DEF AND Type, \nSome Long String AND Qwerty, \nz.GHI AND Tree \n' 

결과는 같아야합니다

MyString = ' x.ABC,\ny.DEF,\nSome Long String,\nz.GHI\n' 

내가하고 싶습니다 그것은 정규식을 사용하지 않고.

나는 스플릿과 조인 및 인덱스를 사용하여 다양한 방법을 시도했지만 아무 소용이 없습니다.

모든 방향이 좋습니다.

감사합니다.

+3

정규식이 아닌 이유는 무엇입니까? 정규 표현식이 만들어졌습니다. –

+1

regex :'re.sub ('(AND \ w +) ,?', '', MyString)' –

답변

1

모세의 대답이 정말 좋은데, 숙제에 관한 질문이며 수입품을 사용하지 말라는 재미있는 느낌이 들었습니다. 어쨌든 여기에 수입이없는 답변이 있습니다. 모세 나 정규식과 같은 다른 답변만큼 효율적이지는 않지만 다른 사람들과 마찬가지로 효과가 있습니다. 이제

MyString = 'x.ABC AND XYZ, \ny.DEF AND Type, \nSome Long String AND Qwerty, \nz.GHI AND Tree \n' 
new_string = '' 
for each in [[y for y in x.split(' AND ')][0] for x in MyString.split('\n')]: 
    new_string+=each 
    new_string+='\n' 

print(new_string) 
+0

'BLAND '와 같은 단어가 AND와 같은 단어를 포함하면이 작업이 실패합니다. –

+0

@MosesKoledoye 아, 잊어 버렸습니다. 'AND'에 공백을 넣으십시오. 감사. – MooingRawr

+0

고마워요! 그게 전부 야. 그리고 아니요, 집에있는 일이 아닙니다 :) – user1013388

1

당신은 라인에 문자열을 분할 할 수 있고, 더 단어로 라인을 분할하고 AND이 (자신 포함) 후 모든 단어를 삭제하는 itertools.takewhile를 사용하십시오 개행 문자와 쉼표가 수동입니다

from itertools import takewhile 

''.join(' '.join(takewhile(lambda x: x != 'AND', line.split())) + ',\n' 
             for line in MyString.splitlines()) 

공지 것을 각 라인이 str.join으로 재구성 된 후에 추가됩니다.

모든 라인은 마지막으로 str.join을 사용하여 결합됩니다.

0

가 노력하고 있습니다 ... 아마 'APPEND'키워드를 피하는 것은 ... 정말 빠른 ...

In [19]: ',\n'.join([x.split('AND')[0].strip() for x in MyString.split('\n')]) 


Out[19]: 'x.ABC,\ny.DEF,\nSome Long String,\nz.GHI,\n' 

당신은 이유를 이해하기 위해이 답변을 확인하실 수 있습니다

Comparing list comprehensions and explicit loops (3 array generators faster than 1 for loop)

+1

'BLAND'와 같은 단어가 'AND'이전에 오는 경우이 오류가 발생합니다. –

+0

오른쪽 ... 문제를 해결했습니다! –

관련 문제