Seite 1 von 1
RegEx: Alles finden was nicht mit einem bestimmten Wort begi
Verfasst: Donnerstag 8. März 2007, 13:59
von sliwalker
Hallo zusammen,
ich möchte mittels RegularExpressions alle Datensätze finden, die NICHT mit einem/mehrere bestimmten Wort beginnt. Ich bin momentan aber nur in der Lage alle Datensätze zu finden, die eben mit diesen Wörtern beginnen. Andersrum, also nach allem Suchen was ich auch finden möchte, funktioniert nicht, weil ich nicht alle Fälle kenne die zutreffen können. Ich weiß aber, was nicht vorhanden sein soll.
Es wäre sehr nett, wenn mir da jemand unter die Arme greifen könnte. Ich habe dieses Forum gewählt, weil ich denke dass alle Python Programmierer bestimmt auch RegEx-Könner sind
Hier das was ich bislang habe:
Ich habe viel rumprobiert und umgestellt. Die RegEx soll heißen:
Finde alles was ein beliebige Zeichen vor einem Slash und nach einem Slash enthält, aber beachte diejenigen nicht, die mit Do, Call, Set, Translate, Working oder Yes beginnen.
Ich habe einige Seiten besucht, während ich nach der Lösung gesucht habe, aber bislang weiß ich nur, wie ich einzelne Zeichen negieren kann. Nicht aber Wörter
greetz
SLi
Verfasst: Donnerstag 8. März 2007, 14:23
von BlackJack
Das geht auch nicht so einfach. Du kannst doch aber einfach mit einem regulärem Ausdruck beschreiben was Du nicht erkennen möchtest und die ``if``-Bedingung umdrehen. Also ungefähr so:
Code: Alles auswählen
if not re.match('(Do|Call|Set|Translate|Working|Yes)', line):
pass
Verfasst: Donnerstag 8. März 2007, 14:28
von sliwalker
Hoi,
danke für die Antwort.
Wär ich im Code, wäre dies sicher eine Idee.
Aber ich gebe die RegEx in eine Maske ein, sprich ich habe keine Kontrolle über die Suche selbst.
Also ganze Wörter negieren funktioniert nicht so einfach?
Mist...
Dann muss ich mir die Suche wohl selber schreiben

Danke nochmal...ich schau nochmal rein, falls jemanden doch noch was einfällt

*hoff*
greetz
SLi
Verfasst: Donnerstag 8. März 2007, 14:32
von TDO
mal ganz wild ins blaue geraten
Verfasst: Donnerstag 8. März 2007, 14:43
von sliwalker
Hoi,
schonmal viel besser als meine Version

Vorher hatte ich 16000 Ergebnisse, jetzt noch 360

Danke soweit. Das macht die Zahl so klein, dass ich von Hand den Rest machen kann. Danke!
Werde natürlich noch überprüfen, ob was rausgefallen ist, was nicht sollte.
Hinweis:
Es sind noch viele Datensätze mit "Do" drin.
greetz
SLi
Verfasst: Donnerstag 8. März 2007, 15:01
von HWK
TDO hat geschrieben:mal ganz wild ins blaue geraten
Das ist wohl wirklich ziemlich geraten. Hier ein Zitat aus der Python-Doku für [] in REs:
Used to indicate a set of characters. Characters can be listed individually, or a range of characters can be indicated by giving two characters and separating them by a "-".
Special characters are not active inside sets. For example, [akm$] will match any of the characters "a", "k", "m", or "$"; [a-z] will match any lowercase letter, and [a-zA-Z0-9] matches any letter or digit. Character classes such as \w or \S (defined below) are also acceptable inside a range. If you want to include a "]" or a "-" inside a set, precede it with a backslash, or place it as the first character. The pattern []] will match ']', for example.
You can match the characters not within a range by complementing the set. This is indicated by including a "^" as the first character of the set; "^" elsewhere will simply match the "^" character. For example, [^5] will match any character except "5", and [^^] will match any character except "^".
Das Minus war ja wohl auch eher symbolisch gedacht.
Also: Black Jack hat schon recht.
MfG
HWK
Verfasst: Donnerstag 8. März 2007, 15:47
von BlackJack
Ums nochmal am Beispiel zu verdeutlichen, folgende reguläre Ausdrücke sind äquivalent:
Code: Alles auswählen
'[^(Do|Call|Set|Translate|Working|Yes)]'
<=>
'[^()CDSTWYaegiklnorst|]'
@sliwalker: Vielleicht könntest Du in die GUI noch eine Checkbox einbauen, ob das ein "positiver" oder eine "negativer" regulärer Ausdruck sein soll.
Verfasst: Donnerstag 8. März 2007, 15:49
von TDO
ja habs verstanden ... doof das die spezialsachen in diesen char-classes abgestellt werden

... und sry fuer den falsch post
Verfasst: Donnerstag 8. März 2007, 15:51
von sape
Verfasst: Donnerstag 8. März 2007, 15:52
von sliwalker
Hi,
ärgerlich!!!
Danke für eure Hilfe.
Das ist ein Problem der größeren Art. Es ist leider nicht mit einer CheckBox getan. Ich werde mal schauen, wie ich da jetzt rangehe. Muss wohl ein ganz anderer Weg sein
Danke nochmal...
greetz
SLi
Verfasst: Donnerstag 8. März 2007, 16:23
von BlackJack
Warum ist es nicht mit einer Checkbox getan? Willst Du positive und negative Kriterien gleichzeitig haben? Dann könntest Du die Möglichkeit anbieten mehrere Ausdrücke, jeweils mit Checkbox, einzugeben. Entweder eine feste Anzahl bzw. Obergrenze oder dynamisch mit einem "Add"-Button. Ist natürlich ein wenig komplexer als ein einfaches Eingabefeld.
Re: RegEx: Alles finden was nicht mit einem bestimmten Wort
Verfasst: Freitag 9. März 2007, 22:04
von PmanX
sliwalker hat geschrieben:Hallo zusammen,
ich möchte mittels RegularExpressions alle Datensätze finden, die NICHT mit einem/mehrere bestimmten Wort beginnt. Ich bin momentan aber nur in der Lage alle Datensätze zu finden, die eben mit diesen Wörtern beginnen. Andersrum, also nach allem Suchen was ich auch finden möchte, funktioniert nicht, weil ich nicht alle Fälle kenne die zutreffen können. Ich weiß aber, was nicht vorhanden sein soll.
Es wäre sehr nett, wenn mir da jemand unter die Arme greifen könnte. Ich habe dieses Forum gewählt, weil ich denke dass alle Python Programmierer bestimmt auch RegEx-Könner sind
Hier das was ich bislang habe:
Ich habe viel rumprobiert und umgestellt. Die RegEx soll heißen:
Finde alles was ein beliebige Zeichen vor einem Slash und nach einem Slash enthält, aber beachte diejenigen nicht, die mit Do, Call, Set, Translate, Working oder Yes beginnen.
Ich habe einige Seiten besucht, während ich nach der Lösung gesucht habe, aber bislang weiß ich nur, wie ich einzelne Zeichen negieren kann. Nicht aber Wörter
greetz
SLi
Was soll gesucht werden? 2..3 Beispielstrings.
ich möchte mittels RegularExpressions alle Datensätze finden, die NICHT mit einem/mehrere bestimmten Wort beginnt.
Die RegEx beginnt mit beliebigen Zeichen gefolgt von einem Slash.
Mir ist die Aufgabenstellung nicht klar.