Seite 1 von 1
Python und Regex
Verfasst: Dienstag 1. April 2014, 09:01
von serial
Hallo zusammen,
ich bin in dieser spannenden Welt ein Neuling und wollte was fragen:
Ich habe einen String:
AAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAA
BB1
AAAAAAAAAAAAAAAAAA
BB2
AAAAAAAAAAAAAAAAAA
Wenn ich als Regex:
BB1.*AA (mit Dot matches all) eingebe, dann habe ich das hier als Match:
BB1
AAAAAAAAAAAAAAAAAA
BB2
AAAAAAAAAAAAAAAAAA
Ich will aber nach
BB1.*AA ohne dass es dazwischen noch ein BB steht suchen. Also quasi:
BB1
AAAAAAAAAAAAAAAAAA
Und wie kann ich das am effektifsten in Python implementieren.
Ich wäre über jeden Tipp dankbar.
Danke im Voraus.
Python 2.7
Gruß,
Serial.
Re: Python und Regex
Verfasst: Dienstag 1. April 2014, 09:26
von BlackJack
@serial: Reguläre Ausdrücke sind normalerweise ”gierig” und versuchen so viel wie möglich zu treffen, darum erwischt '.*' alles bis zu den letzten beiden 'A'. Nicht-”gierig” bekommt man einen Teilausdruck mit dem '?', also 'BB1.*?AA'. Da gibt es nun aber das Problem das nicht mehr alle 'A' bis zum 'BB2' getroffen werden, sondern nur die ersten beiden. Stehen ja auch nur zwei dort. Das kann man in dem Beispiel dadurch beheben, dass man statt „zwei A” sagt man möchte „mindestens zwei A”: 'BB1.*?A{2,}'.
Ich habe aber den Verdacht das es im Original nicht einfach nur um 'A's geht, und das reguläre Ausdrücke (alleine) hier vielleicht nicht die beste Antwort sind.
Re: Python und Regex
Verfasst: Dienstag 1. April 2014, 10:06
von serial
BlackJack hat geschrieben:@serial: Reguläre Ausdrücke sind normalerweise ”gierig” und versuchen so viel wie möglich zu treffen, darum erwischt '.*' alles bis zu den letzten beiden 'A'. Nicht-”gierig” bekommt man einen Teilausdruck mit dem '?', also 'BB1.*?AA'. Da gibt es nun aber das Problem das nicht mehr alle 'A' bis zum 'BB2' getroffen werden, sondern nur die ersten beiden. Stehen ja auch nur zwei dort. Das kann man in dem Beispiel dadurch beheben, dass man statt „zwei A” sagt man möchte „mindestens zwei A”: 'BB1.*?A{2,}'.
Ich habe aber den Verdacht das es im Original nicht einfach nur um 'A's geht, und das reguläre Ausdrücke (alleine) hier vielleicht nicht die beste Antwort sind.
Danke für die schnelle Antwort erstmal.
Ja du hast recht, im Original gehts nicht nur um 'A's aber es ist einfacher glaube ich:
* X=10 text
* Y=0 text
* Y=1 text
* Y=13 text
* X=127 text
* X=100 text
* Y=1 text
* X=200 text
* Y=1 text
Ich würde gerne nach: "X=1 bis Y=1" suchen und nur das hier als Ergebnis zurückbekommen:
* X=10 text
* Y=0 text
* Y=1 text
und nicht :
* X=10 text
* Y=0 text
* Y=1 text
* Y=13 text
* X=127 text
* X=100 text
* Y=1 text
Re: Python und Regex
Verfasst: Dienstag 1. April 2014, 10:12
von serial
EDIT: Ich glaube ich habs:
X=1.*?Y=1(?=.*X)
Danke für deine Hilfe.
Re: Python und Regex
Verfasst: Dienstag 1. April 2014, 11:26
von BlackJack
@serial: Mit dem Ausdruck bekommst Du nur:
Also ohne den ersten '* ' und ohne den 'text' in der letzten getroffenen Zeile. Und der '(?=.*X)'-Teil bewirkt dabei nichts. Jedenfalls nicht bei der Beispieleingabe.
Das neue Eingabebeispiel bestärkt mich in der Vermutung, das reguläre Ausdrücke alleine nicht die Lösung sind, die ich anstreben würde, sondern Python-Code der auf Zeilenebene mit den Daten arbeitet, denn die scheinen ja zeilenweise organisiert zu sein.
Re: Python und Regex
Verfasst: Mittwoch 2. April 2014, 12:35
von Boa
@serial: Such dir am besten ein Programm in dem du die Ausdrücke schnell testen kannst. Z.B.
http://regexpal.com/ oder Notepad++
Re: Python und Regex
Verfasst: Mittwoch 2. April 2014, 13:28
von Sirius3
@Boa: was gibt es schnelleres, als die regulären Ausdrücke direkt mit Python zu testen?
Re: Python und Regex
Verfasst: Mittwoch 2. April 2014, 13:38
von Boa
@Sirius3: *Wegrenn* bevor mich die Fangfrage fängt

Re: Python und Regex
Verfasst: Mittwoch 2. April 2014, 14:00
von BlackJack
@Sirius3: Na ein Programm zum Testen von Regexen. Wo man Änderungen gleich sieht wenn man Ausdruck oder Text ändert, wo die Treffer farbig hervorgehoben werden (am besten nach Gruppen eingefärbt), wo man alle Treffer und Gruppen automatisch in Tabellenform angezeigt bekommt.
Re: Python und Regex
Verfasst: Dienstag 8. April 2014, 15:57
von fheck
IDEs wie PyCharm haben solche Regex-Test-Funktionen auch integriert
LG