2010-11-13 21 views
11

Tengo una cadena en la que la palabra "LOCAL" aparece muchas veces. Usé la función find() para buscar esta palabra pero también devuelve otra palabra "Localmente". ¿Cómo puedo unir la palabra "local" exactamente?Cadena coincidencia exacta

Respuesta

30

Para este tipo de cosas, las expresiones regulares son muy útiles:

import re 

print(re.findall('\\blocal\\b', "Hello, locally local test local.")) 
// ['local', 'local'] 

\ b significa límite de la palabra, básicamente. Puede ser el espacio, puntuacion, etc.

Editar para hacer comentarios:

print(re.sub('\\blocal\\b', '*****', "Hello, LOCAL locally local test local.", flags=re.IGNORECASE)) 
// Hello, ***** locally ***** test *****. 

Puede quitar banderas = re.IGNORECASE si no desea ignorar el caso, obviamente.

+0

gracias por su funcionamiento ... pero hay un problema más cuando estoy tratando de reemplazar "Local" con otra palabra que también reemplaza "localmente" como "***** ly". –

+0

Es lo mismo, pero usa re.sub en lugar de re.findall. Edité mi publicación. –

+0

gracias ... está funcionando ... lo estaba intentando desde hace tres días ... eres realmente un gurú de pitón. –

0

¿Buscar 'local'? Tenga en cuenta que Python es sensible a mayúsculas y minúsculas

0

hacer una búsqueda de expresión regular para \ BLOCAL \ b

\ b es una "palabra sitio limítrofe" que puede incluir inicios de líneas, extremos de líneas, puntuacion, etc.

También puede buscar en el caso insensiblemente.

1

Se podría utilizar expresiones regulares para limitar los partidos que se produzca en el límite de palabra, de esta manera:

import re 
p = re.compile(r'\blocal\b') 
p.search("locally") # no match 
p.search("local") # match 
p.findall("rty local local k") # returns ['local', 'local'] 
9

A continuación puede utilizar la función de simple.

def find_word(text, search): 

    result = re.findall('\\b'+search+'\\b', text, flags=re.IGNORECASE) 
    if len(result)>0: 
     return True 
    else: 
     return False 

Usando:

text = "Hello, LOCAL locally local test local." 
search = "local" 
if find_word(text, search): 
    print "i Got it..." 
else: 
    print ":(" 
1
line1 = "This guy is local" 
line2 = "He lives locally" 

if "local" in line1.split(): 
    print "Local in line1" 
if "local" in line2.split(): 
    print "Local in line2" 

Sólo coincidirá con la línea 1.

Cuestiones relacionadas