2010-02-14 26 views
10

Tengo una oración. Quiero encontrar todas las apariciones de una palabra que comienza con un personaje específico en esa oración. Soy muy nuevo en programación y Python, pero por lo poco que sé, esto suena como una pregunta Regex.Simple Python Regex Encuentra el patrón

¿Cuál es el código de coincidencia de patrones que le permitirá a encontrar todas las palabras que coinciden con mi patrón?

Muchas gracias de antemano,

Brock

Respuesta

14
import re 
print re.findall(r'\bv\w+', thesentence) 

imprimirá cada palabra en la frase que comienza con 'v', por ejemplo.

Utilizando el método de cadenas split, como otra respuesta sugiere, no identificaría palabras, pero trozos separados por espacios que pueden incluir puntuacion. Esta solución basada en rehace identificar palabras (letras y dígitos, neto de puntuacion).

+0

Esto parece un gran enfoque, ya que quiero evitar las comas directamente después de una palabra. Mi problema es que no puedo hacer que esto funcione si quiero que la palabra comience con el símbolo @. Ideas? Gracias – Btibert3

+0

añaden un '' @ - una ocurrencia opcional del ' '@' 'en el inicio del patrón de expresión', antes de que el' \ b' (en realidad se puede omitir que '\ b', ya que' @ 'then' v' siempre _ significará un límite de palabra, no es necesario verificar ;-). –

+0

Esto funciona perfecto para mí. ¿Puedes diseñar un método para verificar el carácter final también? En mi caso, la cadena termina con un número. – cutteeth

1
>>> sentence="a quick brown fox for you" 
>>> pattern="fo" 
>>> for word in sentence.split(): 
...  if word.startswith(pattern): 
...   print word 
... 
fox 
for 

Dividir la frase sobre espacios, utilizar un bucle para buscar el patrón e imprimirlos.

1

Secundo la recomendación Inmersión en Python. Pero es básicamente:

m = re.findall(r'\bf.*?\b', 'a fast and friendly dog') 
print(m) 

\ b significa límite de palabras, y. *? asegura que almacenamos la palabra completa, pero retrocedemos para evitar ir demasiado lejos (técnicamente,? se llama un operador flojo).

1

Usted podría hacer (no usa re sin embargo):

matching_words = [x for x in sentence.split() if x.startswith(CHAR_TO_FIND)] 

Las expresiones regulares funcionan también (ver las otras respuestas), pero creo que esta solución será un poco más fácil de leer, y como un aprendizaje para principiantes Python, encontrará listas de comprensión (como la solución anterior) importantes para obtener un nivel de comodidad.

Cuestiones relacionadas