2010-02-03 5 views
4

"foobar"라는 문자열이 있고 "^ a \ s *"라는 문자열을 사용하여 "a"와 일치한다고 가정합니다.Python에서 정규 표현식을 사용하여 문자열의 일치하지 않는 부분 결정

"foobar"가 쉽게 반환되는 방법이 있습니까? (일치하지 않는 부분)

명령 단어을 찾으려면 정규 표현식을 사용하고 regex를 사용하여 문자열에서 명령 단어를 제거하고 싶습니다.

내가 좋아하는이 사용하는 일을 수행하는 방법을 알고 :

mystring[:regexobj.start()] + email[regexobj.end():] 

을하지만 일치하는 항목이 여러 개있는 경우이 떨어져 떨어진다.

감사합니다.

+0

입력 및 출력 예제를 제공 할 수 있습니까? 여러 경기를 어떻게 얻을 수 있습니까? 비교할 수없는 부분이 필요합니까? –

+0

string = "87 foo 87 bar" regex = "87 \ s *"<-이 항목에는 여러 항목이 있습니다. 어떻게 든 반환되는 "foo bar"를 얻고 싶습니다. 배열이 필요 없으며 단일 문자열 만 필요합니다. 정규식을 기반으로 문자열을 분리하는 방법을 알고 있지만 문자열에서 표현식 (토큰 순서)이 어디에서 발생하는지 알고 있어야합니다. – Art

답변

5

사용 re.sub :

import re 
s = "87 foo 87 bar" 
r = re.compile(r"87\s*") 
s = r.sub('', s) 
print s 

결과 :

foo bar 
+0

정확히 내가 무엇을 찾고 있었습니까. 나는 그것이 간단한 방법임을 알았다. 감사! – Art

+0

당신은 또한'r = re.compile(); s = r.sub()'를's = re.sub()'에 추가합니다. – EOL

1
>>> import re 
>>> re.sub("87\s*", "", "87 foo 87 bar") 
'foo bar' 
1

대신 분할 또는 아마도 당신의 re.sub를 사용하고 빈, 빈 문자열을 대체 할 수있는, 분리 ("") 언제든지 패턴을 찾을 수 있습니다. 예를 들어 귀하의 예로들 수 있습니다 ...

>>> import re 
>>> re.sub("^a\s*", "","a foobar") 
'foobar'' 
>>> re.sub("a\s*", "","a foobar a foobar") 
'foobr foobr' 
>>> re.sub("87\s*", "","87 foo 87 bar") 
'foo bar' 
2

그래서 http://docs.python.org/library/re.html#re.split

>>> re.split('(\W+)', 'Words, words, words.') 
['Words', ', ', 'words', ', ', 'words', '.', ''] 

에서

>>> re.split(r'(^a\s*)', "a foobar") 
['', 'a ', 'foobar'] 

하는 당신은 심지어 항목에서 홀수 항목 (어울리는)를 분리 할 수 ​​있습니다 포인트 (나머지).

>>> l = re.split(r'(^a\s*)', "a foobar") 
>>> l[1::2] # matching strings 
['a '] 
>>> l[::2] # non-matching strings 
['', 'foobar'] 

이것은 일치하는 항목을 발견 한 경우, 언제, 어디서, 얼마나 많은 정보를 찾을 수 있는지에 대한 장점이 있습니다.

관련 문제