Die passende Zeichenfolge enthält x und gefolgt von y

Ich möchte auf true auswerten, wenn ein String das Wort 'außer' enthält und von 'xyz' gefolgt wird. Beispielsweise

blah except xyz => true except xyz => true blah except abc => false blah except abc, xyz => true blah except xyz, abc => true xyz except abc => false 

Was ist die pythonischste Art, dies zu tun? Reguläre Ausdrücke scheinen über Tötung. Dies würde wohl nur in einer Funktion verwendet werden. Ich habe den Betreiber benutzt, um den except Teil der Saite zu finden, aber ich bin mir nicht sicher, wie es weiter geht. Dies sollte nicht zwischen Groß- und Kleinschreibung unterschieden werden.

  • Pythonschleife durch String in verschachtelten Schlaufen
  • Wie kann ich einen String in eine Liste aufteilen?
  • Beim Aufteilen einer leeren Zeichenfolge in Python, warum gibt split () eine leere Liste zurück, während Split ('\ n') [''] zurückgibt?
  • Aufteilen einer variablen Länge String in mehrere Teile in Python
  • Was ist unter der Kapuze von x = 'y' 'z' in Python?
  • Wie bekomme ich nur arabische Texte aus einer Zeichenkette mit regulärem Ausdruck?
  • Python: die meisten idiomatischen Weg, um keine zu leeren String zu konvertieren?
  • Mit dem Ergebnis der Formel in einer anderen Berechnung
  • 4 Solutions collect form web for “Die passende Zeichenfolge enthält x und gefolgt von y”

    Versuche diese Regex:

    "except(?=[^\n]*?xyz)"

    • Es wird nur der Text nehmen
    • Wenn bis das Ende der Zeile [^\n]*?
    • Es ist möglich, xyz zu finden.

    Regex lebt hier


    Wie benutzt man es in Python?

     import re word = 'blah except xyz => true' regexp = re.compile(r'except(?=[^\n]*?xyz)') if regexp.search(word) is not None: print 'matched' 

    Ich hoffe es hilft.

    Wie wäre es mit String-Operationen?

     if 'except' in my_string.lower() and my_string.lower().find('xyz') > my_string.lower().find('except'): return True 

    Du könntest auch EAFP benutzen und es vermeiden, dass du 'except' zweimal suchst:

     try: if my_string.lower().index('xyz') > my_string.lower().index('except'): return True else: return False except ValueError: return False 

    Es ist einfacher, wenn man nur wahrheitsgemäße / falsche Werte anstatt tatsächlichen Booleans braucht:

     try: if my_string.lower().index('xyz') > my_string.lower().index('except'): return True except ValueError: return 

    Dies ist einer der Fälle, in denen regex sinnvoll ist:

     if re.search('except.*xyz', string): ... 

    Einfach, schnell und elegant.

    Ich denke, das ist am meisten lesbar:

     'except' in my_string and 'xyz' in my_string.split('except', 1)[1] 
    Python ist die beste Programmiersprache der Welt.