2012-12-30 6 views
-1

죄송합니다. 일반적인 제목입니다. 나는 정규 표현식 다음과 일치하는 파이썬 re 표현을 찾고 :다시 파이썬에서 일치하는 정규 표현식

stringOfAlphaNumeric1 (stringOfAnyCharacter1 , stringOfAnyCharacter2 , stringOfAnyCharacter3)

이 표현식은 공백으로 분리 여러 번 반복 할 수 있습니다. 예를 들면 :

stringOfAlphaNumeric1 (stringOfAnyCharacter1 , stringOfAnyCharacter2 , stringOfAnyCharacter3) stringOfAlphaNumeric2 (stringOfAnyCharacter4 , stringOfAnyCharacter5 , stringOfAnyCharacter6)

나는 다음과 같은 쌍을 얻을 수있는 방법 :

stringOfAlphaNumeric1 -> stringOfAnyCharacter1 
stringOfAlphaNumeric1 -> stringOfAnyCharacter2 
stringOfAlphaNumeric1 -> stringOfAnyCharacter3 
stringOfAlphaNumeric2 -> stringOfAnyCharacter4 
stringOfAlphaNumeric2 -> stringOfAnyCharacter5 
stringOfAlphaNumeric2 -> stringOfAnyCharacter6 
+3

, 무엇을 작동하지 않았다 당신이 했습니까? – mmgp

+0

상태 전환 (예 : stringOfAlphaNumeric1 -> stringOfAnyCharacter1)이란 무엇입니까? 당신은 DFA를 구현하지 않고 있습니다 ... – dan3

+0

@mmgp 그것은 (단 하나의 표현식에서) 사소한 것이 아닙니다. 일반적으로 일치는 겹칠 수 없으며 파이썬에서의 lookbehinds는 가변 길이가 될 수 없습니다. –

답변

3
import re 

#if its fixed: [ Key (Value1 , Value2 , Value3) ] 
regex = re.compile(r'([A-Za-z0-9]+) \((.+?) , (.+?) , (.+?) \)') 
s = "stringOfAlphaNumeric1 (stringOfAnyCharacter1 , stringOfAnyCharacter2 , stringOfAnyCharacter3) stringOfAlphaNumeric2 (stringOfAnyCharacter4 , stringOfAnyCharacter5 , stringOfAnyCharacter6)" 

d = dict((i[0], i[1:]) for i in regex.findall(s)) 

D는 다음과 같습니다

{'stringOfAlphaNumeric2': ('stringOfAnyCharacter4', 'stringOfAnyCharacter5', 'stringOfAnyCharacter6'), 
'stringOfAlphaNumeric1': ('stringOfAnyCharacter1', 'stringOfAnyCharacter2', 'stringOfAnyCharacter3')} 

얻을 쌍 :

[(k, i) for k, v in d.items() for i in v] 

수율 :

아주 기본적인 정규 표현식은
[('stringOfAlphaNumeric2', 'stringOfAnyCharacter4'), 
('stringOfAlphaNumeric2', 'stringOfAnyCharacter5'), 
('stringOfAlphaNumeric2', 'stringOfAnyCharacter6'), 
('stringOfAlphaNumeric1', 'stringOfAnyCharacter1'), 
('stringOfAlphaNumeric1', 'stringOfAnyCharacter2'), 
('stringOfAlphaNumeric1', 'stringOfAnyCharacter3')] 
+0

정말 고마워요! – ahmad