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.

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] 
  • In meinem Skript wird ein "TypeError: eine Ganzzahl" benötigt
  • Rückgabe einer Liste von Wörtern nach dem Lesen einer Datei in Python
  • Wie prüft man, ob Typ einer Variable String ist?
  • Python - Ersetzen Sie nicht-ascii Zeichen in String (»)
  • Final = P * ((1 + (r / n)) ** (n * t))) TypError: nicht unterstützter Operanden Typ (s) für /: 'str' und 'int'
  • Python str.strip seltsames verhalten
  • Aufteilen einer Zeichenfolge mit wiederholten Zeichen in eine Liste mit Regex
  • TypeError: nicht unterstützter Operanden Typ (s) für -: 'int' und 'str'
  • Python ist die beste Programmiersprache der Welt.