Was heißt dieser reguläre Ausdruck?

20/06/2008 - 15:25 von Mathias Hoffmann | Report spam
Hallo!

Ich habe ein kleines Skript im Netz gefunden. Es ist in Python
geschrieben und verwendet unter anderem 'Regulàre Ausdrücke'. Einen Teil
von diesem Ausdruck verstehe ich nicht:

(\S.+?)

Die 'Einzelteile' dieses Codes sind mir klar, aber das als Ganzes eben
nicht.

Das verstehe ich:
- die Klammern '()' zur Gruppierung
- \S = kein Leerzeichen
- . beliebiges Zeichen
- + vorheriges Zeichen muss 1 oder mehrmals auftauchen
- ? vorheriges Zeichen darf höchstens einmal vorkommen

Bei der Kombination von + und ? hört mein Verstàndnis auf. Kann mir
jemand auf die Sprünge helfen?

Gruß
Mathias
 

Lesen sie die antworten

#1 Peter Otten
20/06/2008 - 15:35 | Warnen spam
Mathias Hoffmann wrote:

Hallo!

Ich habe ein kleines Skript im Netz gefunden. Es ist in Python
geschrieben und verwendet unter anderem 'Regulàre Ausdrücke'. Einen Teil
von diesem Ausdruck verstehe ich nicht:

(\S.+?)

Die 'Einzelteile' dieses Codes sind mir klar, aber das als Ganzes eben
nicht.

Das verstehe ich:
- die Klammern '()' zur Gruppierung
- \S = kein Leerzeichen
- . beliebiges Zeichen
- + vorheriges Zeichen muss 1 oder mehrmals auftauchen
- ? vorheriges Zeichen darf höchstens einmal vorkommen

Bei der Kombination von + und ? hört mein Verstàndnis auf. Kann mir
jemand auf die Sprünge helfen?



+? muss hier zusammen gelesen werden. Das auf + folgende ? bedeutet, dass
mindestens ein "beliebiges Zeichen" vorkommen muss, jedoch möglichst wenige
davon. Das ist wichtig z. B. für geklammerte Ausdrücke:

re.compile(r"\(.*\)").findall("(ab)(cd)")






['(ab)(cd)']
re.compile(r"\(.*?\)").findall("(ab)(cd)")






['(ab)', '(cd)']

Siehe auch

http://docs.python.org/lib/module-re.html

"""
*?, +?, ??
The "*", "+", and "?" qualifiers are all greedy; they match as much text as
possible. Sometimes this behaviour isn't desired; if the RE <.*> is matched
against '<H1>title</H1>', it will match the entire string, and not
just '<H1>'. Adding "?" after the qualifier makes it perform the match in
non-greedy or minimal fashion; as few characters as possible will be
matched. Using .*? in the previous expression will match only '<H1>'.
"""

Peter

Ähnliche fragen