Nehmen wir an, wir haben die folgende Reihe von URIs:
A: / user / a / b / c
B: / user / a / b / f / d
C: / user / a / b / e
D: / user / a / k / r
Ich benötige einen regulären Ausdruck in Python, der mit allen Regeln außer Regel B übereinstimmt. Daher sollte er mit allen URIs übereinstimmen, die mit / user / a beginnen, aber die URIs ausschließen, die mit d .
Vielen Dank im Voraus!
Update: Die Segmente der Pfade bestehen nicht aus einzelnen Zeichen, sondern aus ganzen Wörtern. Zum Beispiel kann d "senden" sein.
4 Antworten
Basierend auf der Antwort von Jiman lautet die genaue Lösung meiner Frage wie folgt:
(?!.*d)\/user/a/.*
Beachten Sie, dass d und a ganzen Wörtern entsprechen. Ein Beispiel wäre also:
(?!.*send)\/user/myapp/.*
Probieren Sie es aus:
(?!.*\/d)\/user\/a.*
(?!. * / d) -> negative Vorausschau-Behauptung, die im Grunde sagt, dass sie nicht mit / d endet
Bringe einem Mann das Fischen bei:
Geben Sie die Testzeichenfolgen ein und spielen Sie mit den regulären Ausdrücken herum :)
Wie wäre es mit so etwas wie:
^/user/a/.*[^d]$
Lesen Sie es als "Beginnen Sie mit / user / a /, dann mit einer beliebigen Anzahl anderer Zeichen und dann mit einem Endzeichen, das kein d sein darf.
Wahrscheinlich nur klarer zu bedienen:
a = '/user/a/b/f/d'
b = s.strip('/').split('/')
if b[:2] == ['user', 'a'] and b[-1] != 'd':
pass # whatever
Oder wenn Sie nicht nach /
teilen, dann:
if a.startswith('/user/a') and not a.endswith('d'):
pass # whatever
Verwandte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.