2013-08-30 4 views
6

단어가 포인트로 구분 된 문자열이 있습니다. 예 :파이썬 : 와일드 카드 단어 제거

string1 = 'one.two.three.four.five.six.eight' 
string2 = 'one.two.hello.four.five.six.seven' 

어떻게 (인해 번째 단어가 변화, 예를 들면,이 경우에는) 와일드 카드로 한 단어를 할당 파이썬 방법이 스트링을 사용하지. 나는 정규 표현식을 생각하고있다. 그러나 파이썬에서 이것을 염두에 두는 접근법이 가능한지 모르겠다. 예를 들어 는 :

string1.lstrip("one.two.[wildcard].four.") 

또는

string2.lstrip("one.two.'/.*/'.four.") 

답변

18

사용 (내가 split('.')[-3:]하여이를 추출 할 수 있다는 것을 알고,하지만 난 일반적인 방법을 찾고 있어요 lstrip은 예입니다) re.sub(pattern, '', original_string) 일치하는 부분을 제거하려면 original_string :

>>> import re 
>>> string1 = 'one.two.three.four.five.six.eight' 
>>> string2 = 'one.two.hello.four.five.six.seven' 
>>> re.sub(r'^one\.two\.\w+\.four', '', string1) 
'.five.six.eight' 
>>> re.sub(r'^one\.two\.\w+\.four', '', string2) 
'.five.six.seven' 

BTW, 당신은 str.lstrip을 오해하고 있습니다 :

>>> 'abcddcbaabcd'.lstrip('abcd') 
'' 

str.replace이 더 적합 (물론, 의 re.sub도) :

>>> 'abcddcbaabcd'.replace('abcd', '') 
'dcba' 
>>> 'abcddcbaabcd'.replace('abcd', '', 1) 
'dcbaabcd' 
+0

감사합니다! 그리고 귀하의 "BTW": 올바른 방법으로 주문 된 "abcd"만 제거 할 수 있습니까? 또는 정규식의 경우에만이 경우입니까? – aldorado

+0

@aldorado,''abcddcbaabcd'.replace ('abcd', '', 1)'. '1'은 한 번만 바꾸는 것을 의미합니다. – falsetru

+2

@aldorado,'str.replace'의 샘플 사용법을 보여주는 또 다른 코드를 추가했습니다. – falsetru