2010-03-07 14 views
13

¿Cómo puedo utilizar la función startswith para que coincida con cualquier carácter alfa [a-zA-Z]. Por ejemplo, me gustaría hacer esto:Python: startswith any alpha character

if line.startswith(ALPHA): 
    Do Something 

Respuesta

35

Si desea hacer coincidir las letras no ASCII, así, que puede hacer:

if line and line[0].isalpha(): 
+0

+1, Esta es la mejor solución, especialmente si está envuelta en una función o incluso en un método de alguna clase de validación. –

+0

por supuesto, la línea debe ser un objeto unicode para que funcione la parte no Ascii. – u0b34a0f6ae

+13

Aún más corto: 'if línea [: 1] .isalpha():' –

5

Una solución fácil sería utilizar el módulo de python regex:

import re 
if re.match("^[a-zA-Z]+.*", line): 
    Do Something 
+0

-1: Uso de expresiones regulares es masivamente overkil l para esta tarea. Además, solo necesita verificar el primer carácter: esta expresión regular intentará hacer coincidir toda la cadena, lo que podría ser muy largo. –

+5

Incluso si se vio obligado a usar el módulo re, todo lo que necesitaba era '[a-zA-Z]'. El '^' es un desperdicio de una pulsación de tecla (lea la sección de documentos sobre la diferencia entre 'búsqueda' y' coincidencia'). El '+' es una pequeña pérdida de tiempo (importante si la cadena tiene muchas letras al inicio); una letra es suficiente El '. *' Es una pérdida de 2 pulsaciones de teclas y posiblemente mucho más tiempo. –

8

puede pasar una tupla a startswiths() (en Python 2.5 +) para que coincida cualquiera de sus elementos:

import string 
ALPHA = string.ascii_letters 
if line.startswith(tuple(ALPHA)): 
    pass 

por supuesto, en este caso simple, una prueba de expresión regular o el operador in sería más fácil de leer.

+0

No lo sabía. +1 no es la mejor respuesta para esta pregunta, sino porque es, de lejos, la mejor respuesta para una tonelada de mi propio código. Gracias. – DaveTheScientist

3

Este es probablemente el método más eficiente:

if line != "" and line[0].isalpha(): 
    ... 
+0

+1, esta es la mejor solución, especialmente si está envuelta en una función o incluso en un método de alguna clase de validación. –

+5

¿Por qué crees que esto es mejor que 'if line and line [0] .isalpha():'? –

-1

si no se preocupan por espacios en blanco delante de la cadena,

if line and line.lstrip()[0].isalpha(): 
0
if line.startswith((chr(x) for x in range(ord('a'), ord('z')+1)+range(ord('A'), ord('Z')+1)): 
    # do processsing 
    pass