2012-11-29 2 views
0

파이썬을 사용하여 문자열에서 패턴을 여러 번 패턴 일치시킵니다. 문제 :파이썬을 사용하여 문자열에서 동일한 패턴을 여러 번 grep하는 방법은 무엇입니까?

string = 'The value = 1 The value = 2 The value = 3' 

는 난 단지 값을 grep을 싶지만처럼 내 출력해야한다 :이 같은 일을 오전

['value = 1 value = 2 value = 3'] 

:

pattern = re.compile('[value = (\d+)]*') 
values = pattern.search(string) 
values.group(0) 

출력 :

'' 

예 : NULL (no matc h)

필요한 출력을 grep하기 위해 올바른 정규식을 제공하도록 도와주세요.

+2

입력 예제에서 '='등호와 숫자 사이에는 공백이 없지만 정규 표현식에는 공백이 있어야합니다. 출력 예제는 목록의 단일 문자열입니다. 대신 3 개의 문자열 목록을 만드시겠습니까? –

+0

문자열은 다음과 같아야합니다. string = '값 = 1 값 = 2 값 = 3'. 나는 단지 그것을 지키고있다. 목록이 관련되어 있는지 아닌지 확실하지 않습니다 ... – MaxintowN

+0

왜 '브래킷'뒤에'*'가 있습니까? –

답변

0

RE 원본에 대괄호 ([])를 사용하면 매우 이상합니다. 그것들은 문자 집합을 형성합니다. 모든 경기를 얻을 수 findall()

>>> pattern = re.compile(r'([^=]+)\s*=\s*(\d+)') 
>>> pattern.findall(string) 
[('The value ', '1'), (' The value ', '2'), (' The value ', '3')] 

주 사용, 너무 값 이름을 얻기 위해 그룹화 :

당신은 같은 것을 사용해야합니다.

+0

고마워요. 하지만 내 출력은 하나의 문자열과 같아야합니다. [ 'value = 1 value = 2 value = 3'] – MaxintowN

1
>>> [' '.join(re.findall(r'value = \d+', string))] 
['value = 1 value = 2 value = 3'] 
1

문자 클래스 그룹을 사용하고 있습니다. (으로 일반 그룹을 사용해야합니다.

import re 

string = 'The value = 1 The value = 2 The value = 3' 

pattern = re.compile(r'(value = \d+)') 
pattern.findall(string) 
# OUT: ['value = 1', 'value = 2', 'value = 3'] 
" ".join(pattern.findall(string)) 
# OUT: 'value = 1 value = 2 value = 3' 
관련 문제