Compruebe si la cadena coincide con el patrón


317

¿Cómo verifico si una cadena coincide con este patrón?

Letra mayúscula, número (s), letra mayúscula, número (s) ...

Ejemplo, estos coincidirían:

A1B2
B10L1
C1N200J1

Estos no ('^' apunta al problema)

a1B2
^
A10B
   ^
AB400
^

3
¿podría explicar más por qué es un problema?
John Woo

44
^([A-Z]\d+){1,}$¿Me gusta esto?
Passerby

En su tercer ejemplo, el problema debería ser con By no con A.
Burhan Khalid

tal vez es un error tipográfico en el problema. ambos Ay Bson minúsculas ¿verdad? A10by aB400?
John Woo

@Burhan, el problema es con A porque B tiene números al lado y A no
DanielTA

Respuestas:


465
import re
pattern = re.compile("^([A-Z][0-9]+)+$")
pattern.match(string)

Editar: como se señaló en los comentarios match, solo se comprueban las coincidencias al comienzo de la cadena, mientras re.search()que coincidirá con un patrón en cualquier lugar de la cadena. (Ver también: https://docs.python.org/library/re.html#search-vs-match )


20
A partir de los documentos en re.match: If zero or more characters at the beginning of string match the regular expression pattern. Pasé como 30 minutos tratando de entender por qué no podía hacer coincidir algo al final de una cadena. Parece que no es posible con match, ¿verdad? Sin re.search(pattern, my_string)embargo , para eso funciona.
conradkleinespel

2
@conradk Sí, tienes razón, creo que hay algo así como implícito ^al principio cuando lo usas match. Creo que es un poco más complicado que esa explicación muy simple, pero no estoy claro. Sin embargo, tienes razón en que comienza desde el principio de la cadena.
CrazyCasta

173

Un trazador de líneas: re.match(r"pattern", string) # No need to compile

import re
>>> if re.match(r"hello[0-9]+", 'hello1'):
...     print('Yes')
... 
Yes

Puedes evaluarlo como boolsea ​​necesario

>>> bool(re.match(r"hello[0-9]+", 'hello1'))
True

Desaparecido import recomo la primera línea
arod

Eso es raro. ¿Por qué puedes usarlo re.matchen el contexto de un if, pero tienes que usarlo boolsi lo estás usando en otro lugar?
LondonRob

16
Cuidado con re.match. Solo coincide al comienzo de una cadena. Echa un vistazo a su re.searchlugar.
LondonRob

@LondonRob probablemente porque ifverifica que no haya coincidencia None.
Dennis

Hay una gran necesidad de compilar para asegurarse de que no haya errores en las expresiones regulares como errores de rango de caracteres incorrectos
Suh Fangmbeng

36

Por favor intenta lo siguiente:

import re

name = ["A1B1", "djdd", "B2C4", "C2H2", "jdoi","1A4V"]

# Match names.
for element in name:
     m = re.match("(^[A-Z]\d[A-Z]\d)", element)
     if m:
        print(m.groups())

1
Este es el único caso que devuelve la coincidencia que se requiere para obtener grupos. La mejor respuesta en mi opinión.
Rick Smith

24
import re
import sys

prog = re.compile('([A-Z]\d+)+')

while True:
  line = sys.stdin.readline()
  if not line: break

  if prog.match(line):
    print 'matched'
  else:
    print 'not matched'

7

las expresiones regulares hacen que esto sea fácil ...

[A-Z] coincidirá exactamente con un personaje entre A y Z

\d+ coincidirá con uno o más dígitos

() agrupar cosas (y también devolver cosas ... pero por ahora solo piense en ellas agrupando)

+ selecciona 1 o más


6
  
import re

ab = re.compile("^([A-Z]{1}[0-9]{1})+$")
ab.match(string)
  


Creo que debería funcionar para un patrón de mayúsculas y números .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.