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.

  • Unterdrückung / Druck ohne b 'Präfix für Bytes in Python 3
  • Strcmp für Python oder wie man Substrings effizient (ohne Kopie) beim Aufbau eines Suffix-Arrays sortiert
  • Der Grund: Python-String-Zuweisungen versehentlich '\ b' in '\ x08' und '\ a' in '\ x07' ändern, warum Python das tat?
  • Python / Django: So entfernen Sie zusätzliche Leerzeichen & Tabs aus einer Zeichenfolge?
  • UnicodeEncodeError mit xlrd
  • Return Variablenname von außerhalb der Funktion, als String innerhalb der Python-Funktion
  • Wie kann ich den Wert von exec in function zurückgeben?
  • So entfernen Sie leere Zeilen mit oder ohne Whitespace in Python
  • 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.