2012-05-13 8 views
11

sto avendo una stringa pitone di formatotrovare la posizione di una sottostringa in una stringa

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

qui ho bisogno di ottenere la posizione di 'è' che è circondata da caratteri speciali o caratteri non alfabetici (vale a dire secondo 'è' in questo esempio). tuttavia, utilizzando

mystr.find('is') 

restituirà la posizione se "è" associato a "questo" che non è desiderato. come posso trovare la posizione di una sottostringa circondata da caratteri non alfabetici in una stringa? usando python 2.7

risposta

13

Qui l'opzione migliore è usare un'espressione regolare. Python ha the re module per lavorare con le espressioni regolari.

Usiamo una semplice ricerca per trovare la posizione del "is":

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

Questo restituisce il primo incontro come un oggetto partita. Abbiamo quindi è sufficiente utilizzare MatchObject.start() per ottenere la posizione di partenza:

>>> match.start(1) 
8 

Edit: Un buon punto di fatto, facciamo "is" un gruppo e match che di gruppo per essere sicuri di ottenere la posizione corretta.

Come indicato nei commenti, questo rende alcune presunzioni. Uno è che circondato da significa che "is" non può essere all'inizio o alla fine della stringa, in tal caso, è necessaria un'espressione regolare diversa, poiché corrisponde solo alle stringhe circoscritte.

Un altro è che questo conta i numeri come caratteri speciali - hai dichiarato non alfabetico, che io intendo significa numeri inclusi. Se non vuoi che i numeri vengano contati, allora usare r"\b(is)\b" è la soluzione corretta.

+0

In realtà dovresti usare '\ b' per quello. – georg

+0

@ thg435 Per cosa, scusa? –

+0

're.search (r '\ bis \ b')' - altrimenti si abbina anche il simbolo precedente e la posizione è sbagliata. – georg