Serie de Python coincidencia de patrones y expresiones regulares

Buscar en la cuenta pública de WeChat "Programador Koala" ¡Bienvenido a seguir!

Es posible que esté familiarizado con la búsqueda de texto, es decir, presione Ctrl-F, ingrese la palabra que desea encontrar. "Expresión regular" es una versión mejorada de Ctrl-F. Las expresiones regulares son geniales, pero si no son programadores, pocas personas las sabrán, aunque la mayoría de los editores de texto y procesadores de texto modernos tienen funciones de búsqueda y búsqueda y reemplazo, que pueden buscarse en base a expresiones regulares. Las expresiones regulares pueden ahorrar mucho tiempo, no solo para los usuarios de software, sino también para los programadores. Aprenda expresiones regulares, problemas que otros necesitan días de trabajo tedioso para resolver, y otros son propensos a errores, y solo necesita escribir teclas para resolver problemas.

 

A continuación no hay forma de encontrar patrones de texto usando expresiones regulares.

Suponga que desea encontrar el número de teléfono en una cadena y conoce el patrón: 3 dígitos, 1 guión, 3 dígitos, 1 guión y luego 4 dígitos. Por ejemplo: 498-553-5453.

Supongamos que usamos una función llamada isPhoneNumber () para verificar si la cadena coincide con el patrón, devuelve True o False. Abra un nuevo editor de archivos e ingrese lo siguiente:

 

def isPhoneNumber(text):
  if len(text) !=12:
      return False
  for i in range(0,3):
      if not text[i].isdecimal():
          return False
      if text[3]!='-':
          return False
  for i in range(47):
      if not text[i].isdecimal():
          return False
      if text[7] != '-':
          return False
  for i in range(812):
      if not text[i].isdecimal():
          return False
  return True
print('498-553-5453 is a phone number:')
print(isPhoneNumber('498-553-5453'))
print('Moshi moshi is a phone number:')
print(isPhoneNumber('Moshi moshi'))

 

Al ejecutar el programa, la salida se ve así:

 

498-553-5453 is a phone number:
True
Moshi moshi is a phone number:
False

 

Llamar a la función isPhoneNumber () con el parámetro ' 498-553-5453 ' devolverá True, y el parámetro ' Moshi moshi ' devolverá False. La primera prueba falla porque no tiene 12 caracteres.

Se debe agregar más código para encontrar este patrón de texto en cadenas más largas. Reemplace las 4 llamadas a la función de impresión en el código anterior con el siguiente código:

 

message='Call me at 498-553-5453 tomorrow.415-233-2322 is my office.'
for i in range(len(message)):
 chunk=message[i:i+12]
 if isPhoneNumber(chunk):
   print('Phone number found:' + chunk)
   print('Done')

 

Cuando se ejecuta el programa, el resultado se ve así:

 

Phone number found:498-553-5453
Phone number found:415-233-2322
Done

 

En este ejemplo, aunque los caracteres en el mensaje son muy cortos, también puede contener millones de caracteres y el programa aún no tarda 1 segundo en ejecutarse. Los programas similares que usan expresiones regulares para encontrar números de teléfono no se ejecutarán durante más de un segundo, pero escribir dichos programas con expresiones regulares será mucho más rápido.

Ninguno

 

 
 
 

 

 

 

 

 
13 artículos originales publicados · Me gusta2 · Visitas 577

Supongo que te gusta

Origin blog.csdn.net/weixin_40273144/article/details/80294518
Recomendado
Clasificación