RegEx: Alles finden was nicht mit einem bestimmten Wort begi

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
sliwalker
User
Beiträge: 21
Registriert: Sonntag 29. Juni 2003, 20:16
Wohnort: Bielefeld

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:

Code: Alles auswählen

.*\/.*-(^Do|^Call|^Set|^Translate|^Working|^Yes)
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
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
sliwalker
User
Beiträge: 21
Registriert: Sonntag 29. Juni 2003, 20:16
Wohnort: Bielefeld

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
"May `open source´ be with you"
TDO
User
Beiträge: 25
Registriert: Montag 10. Juli 2006, 19:49
Kontaktdaten:

mal ganz wild ins blaue geraten

Code: Alles auswählen

.*\/.*-([^(Do|Call|Set|Translate|Working|Yes)])
sliwalker
User
Beiträge: 21
Registriert: Sonntag 29. Juni 2003, 20:16
Wohnort: Bielefeld

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
"May `open source´ be with you"
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

TDO hat geschrieben:mal ganz wild ins blaue geraten

Code: Alles auswählen

.*\/.*-([^(Do|Call|Set|Translate|Working|Yes)])
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
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.
Zuletzt geändert von BlackJack am Donnerstag 8. März 2007, 15:49, insgesamt 1-mal geändert.
TDO
User
Beiträge: 25
Registriert: Montag 10. Juli 2006, 19:49
Kontaktdaten:

ja habs verstanden ... doof das die spezialsachen in diesen char-classes abgestellt werden :( ... und sry fuer den falsch post
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

sliwalker
User
Beiträge: 21
Registriert: Sonntag 29. Juni 2003, 20:16
Wohnort: Bielefeld

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
"May `open source´ be with you"
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.
PmanX
User
Beiträge: 123
Registriert: Donnerstag 25. Januar 2007, 13:50
Wohnort: Germany.BB.LOS
Kontaktdaten:

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:

Code: Alles auswählen

.*\/.*-(^Do|^Call|^Set|^Translate|^Working|^Yes)
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.
Antworten