Lassen Sie uns sagen, dass ich eine Zeichenfolge wie diese haben ...Python re Rückreferenzierung Elemente wiederholt
myStr = 'START1(stuff); II(morestuff); 8(lessstuff)'
... und ich möchte die Zeichenfolge unmittelbar vor den Klammern extrahieren, sowie die Zeichenfolge innerhalb der Klammern: 1
, stuff
, II
, morestuff
, 8
, lessstuff
. Ich kann dies unter Verwendung split(';')
, etc. erreichen, aber ich möchte sehen, ob ich es auf einen Schlag mit re.search()
tun kann. Ich habe versucht, ...
test = re.search(r'START(?:([I0-9]+)\(([^)]+?)\)(?:;)?)*', myStr).groups()
... oder in einem besser lesbaren Format ...
test = re.search(r'''
START # This part begins each string
(?: # non-capturing group
([I0-9]+) # capture label before parentheses
\(
([^)]+?) # any characters between the parentheses
\)
(?:;)? # semicolon + space delimiter
)*
''', myStr, re.VERBOSE).groups()
... aber ich bekomme nur den letzten Hit: ('8', 'lessstuff')
. Gibt es eine Möglichkeit, mehrere Treffer des gleichen Teils des Ausdrucks zurückzuverweisen?
Sie wollen 'START1' oder '1'? – heemayl
Wenn Sie das tun, müssen Sie unbedingt zuerst die "re.VERBOSE" -Flag erfahren: https://docs.python.org/2/library/re.html#re.VERBOSE ;-) – thebjorn
@heemayl Nur '1'. Ich hätte "START" für diese Frage abstellen können. – reynoldsnlp