-1

一般的なタイトルでごめんなさい。re次の正規表現に一致するPython式を探しています:

stringOfAlphaNumeric1 ( stringOfAnyCharacter1 , stringOfAnyCharacter2 , stringOfAnyCharacter3 )

この式は、空白で区切って何度も繰り返すことができます。例えば:

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

次のペアを取得するにはどうすればよいですか。

stringOfAlphaNumeric1 -> stringOfAnyCharacter1
stringOfAlphaNumeric1 -> stringOfAnyCharacter2
stringOfAlphaNumeric1 -> stringOfAnyCharacter3
stringOfAlphaNumeric2 -> stringOfAnyCharacter4
stringOfAlphaNumeric2 -> stringOfAnyCharacter5
stringOfAlphaNumeric2 -> stringOfAnyCharacter6
4

1 に答える 1

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')]
于 2012-12-30T15:35:43.957 に答える