2012-05-13 12 views
11

i die Position der iPosition eines Teil in einem String finden

mystr = "hi.this(is?my*string+" 

hier benötigen einen Python-String von Format habe zu bekommen ‚ist‘, dass durch Sonderzeichen oder Nicht-alphabetische Zeichen umgeben ist (dh zweites 'ist' in diesem Beispiel). unter Verwendung von

mystr.find('is') 

wird die Position zurückgegeben, wenn 'ist', die mit 'dieser' verbunden ist, die nicht gewünscht ist. Wie finde ich die Position eines Teilstrings, der von nicht alphabetischen Zeichen in einem String umgeben ist? Verwenden von Python 2.7

Antwort

13

Hier ist die beste Option, einen regulären Ausdruck zu verwenden. Python hat the re module für die Arbeit mit regulären Ausdrücken.

Wir verwenden eine einfache Suche die Position des "is" zu finden:

>>> match = re.search(r"[^a-zA-Z](is)[^a-zA-Z]", mystr) 

Dies gibt das erste Spiel als Spiel-Objekt. Wir haben einfach dann MatchObject.start() verwenden, um die Startposition zu bringen:

>>> match.start(1) 
8 

Edit: Ein guter Punkt gemacht, machen wir "is" eine Gruppe und diese Gruppe passen, um sicherzustellen, dass wir die richtige Position zu bekommen.

Wie in den Kommentaren erwähnt, macht dies ein paar Vermutungen. Einer ist, dass umgeben bedeutet, dass "is" nicht am Anfang oder Ende der Zeichenfolge sein kann, wenn dies der Fall ist, wird ein anderer regulärer Ausdruck benötigt, da dies nur umgebene Zeichenfolgen entspricht.

Eine andere ist, dass dies Zahlen als Sonderzeichen zählt - Sie haben nicht-alphabetisch, die ich zu meinen, Zahlen enthalten. Wenn Sie nicht möchten, dass Zahlen zählen, dann ist die Verwendung von r"\b(is)\b" die richtige Lösung.

+0

Sie sollten eigentlich '\ b' dafür verwenden. – georg

+0

@ thg435 Für was, entschuldigung? –

+0

're.search (r '\ bis \ b')' - ansonsten passen Sie auch das vorhergehende Symbol an und die Position ist falsch. – georg

Verwandte Themen