2014-05-21 3 views
0

정규식에 관한 질문이 있습니다.키와 값을 검색하는 정규식 패턴

는 I는 키 - 값 쌍은 이와 같은 | 의해 분리 가지고

>>> import re 
>>> value_pairs = "key1: value | key2: value" 
>>> pairs = re.match('regex-pattern', value_pairs) 
>>> print pairs 
(key1, value) 
(key2, value) 

답변

0

:

"key1: value | key2: value"

난 각 쌍 정규식 패턴을 사용하기위한 키 값을 검색하는 데 도움을 필요 복수 일치를 얻으려면 re.findall을 사용하십시오.

>>> import re 
>>> s = "key1: value | key2: value" 
>>> re.findall(r'([^\s|:]+):\s*([^\s|:]+)', s) 
[('key1', 'value'), ('key2', 'value')] 

위의 예에서 볼 수 있듯이 re.findall은 패턴에 여러 그룹이있는 경우 튜플 목록을 반환합니다.

+0

감사합니다. 값이 1 토큰 이상인 경우 regex를 어떻게 수정할 수 있습니까? 예를 들어 현재 keyge : coca cola가 있으면이 정규 표현식이'[(key, 'coca')]'를 반환하지만' re.findall (r '([^ \ s | :])의 키, 값에 대해'[(key,'coca cola ')]' – Juli

+0

@Juli, 시도해보십시오 [(key, value.strip() : \ s * ([^ | :] +) ', s)]' – falsetru

1

또한 정규식없이이 작업을 수행 할 수 있습니다뿐만 아니라 쌍의 이상 그룹에 대한 작동

>>> value_pairs = "key1: value | key2: value" 
>>> dict([ex.strip() for ex in e.split(':')] for e in value_pairs.split('|')) 
{'key2': 'value', 'key1': 'value'} 

을 : 솔루션에 대한

>>> value_pairs = "key1: value1 | key2: value 2 | key3: value3" 
>>> dict([ex.strip() for ex in e.split(':')] for e in value_pairs.split('|')) 
{'key3': 'value3', 'key2': 'value 2', 'key1': 'value1'} 
+0

+1 dict()에 여분의 outer []가 꼭 필요하지 않습니다. –