Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.python > #5330

[Python-de] Gruppen in sich wiederholenden Sub-Patterns

From Stefan Schwarzer <sschwarzer@sschwarzer.net>
Newsgroups de.comp.lang.python
Subject [Python-de] Gruppen in sich wiederholenden Sub-Patterns
Date 2018-11-15 22:59 +0100
Message-ID <mailman.70.1542319173.6006.python-de@python.org> (permalink)
References <3baad237-6d51-8748-bf15-c9cd66ca5aff@sschwarzer.net>

Show all headers | View raw


Hallo,

ich bin gerade auf etwas gestoßen, das mich ziemlich
überrascht hat:

In [22]: import re

In [23]: regex = re.compile(r"""
    ...: ( \( \w+ , \w+ \) )
    ...: (?:
    ...:   , ( \( \w+ , \w+ \) )
    ...: )*  # beliebige Anzahl von Wiederholungen!
    ...: """, re.VERBOSE)

Hier geht es darum, in einem String alle durch Kommas getrennte
Gruppen der Form '(ab,cd)' zu finden. (`\w+` kann natürlich mehr
matchen, aber das sollte hier keinen Unterschied machen.)

Das Folgende funktioniert noch wie erwartet:

In [24]: regex.search('(ab,cd),(ef,gh)').groups()
Out[24]: ('(ab,cd)', '(ef,gh)')

Aber das hat mich überrascht:

In [25]: regex.search('(ab,cd),(ef,gh),(ij,kl)').groups()
Out[25]: ('(ab,cd)', '(ij,kl)')

In [26]: regex.search('(ab,cd),(ef,gh),(ij,kl),(mn,op)').groups()
Out[26]: ('(ab,cd)', '(mn,op)')

Anscheinend findet sich im Match immer nur die letzte Gruppe
aus dem mit `*` wiederholten Sub-Pattern.

_Erwartet_ hatte ich (aber _nicht_ bekommen!):

In [25]: regex.search('(ab,cd),(ef,gh),(ij,kl)').groups()
Out[25]: ('(ab,cd)', '(ef,gh)', '(ij,kl)')

In [26]: regex.search('(ab,cd),(ef,gh),(ij,kl),(mn,op)').groups()
Out[26]: ('(ab,cd)', '(ef,gh)', '(ij,kl)', '(mn,op)')

Kann man erklären, warum sich der Match anders als erwartet
verhält (ohne nur das zu wiederholen, was ich schon gesagt
habe ;-) )?

Gibt es eine Möglichkeit, den regulären Ausdruck so umzuschreiben,
dass ich alle gewünschten Gruppen bekomme?

Falls nicht, wie würdet ihr das Problem sonst lösen? Mir sind
mögliche Ansätze eingefallen, aber die wirken alle ziemlich
frickelig.

Viele Grüße
Stefan

Back to de.comp.lang.python | Previous | NextNext in thread | Find similar


Thread

[Python-de] Gruppen in sich wiederholenden Sub-Patterns Stefan Schwarzer <sschwarzer@sschwarzer.net> - 2018-11-15 22:59 +0100
  Re: [Python-de] Gruppen in sich wiederholenden Sub-Patterns Stefan Schwarzer <sschwarzer@sschwarzer.net> - 2018-11-17 10:28 +0100

csiph-web