Cadenas, Expresiones regulares¶
import re
cadena = "cadena que tiene\n dos partes"
cadena
'cadena que tiene\n dos partes'
print(cadena)
cadena que tiene
dos partes
cadena.splitlines()
['cadena que tiene', ' dos partes']
sepcad = cadena.splitlines()
sepcad
['cadena que tiene', ' dos partes']
"-------".join(sepcad)
'cadena que tiene------- dos partes'
cadena.find("oso")
-1
help(str.find)
Help on method_descriptor:
find(...)
S.find(sub[, start[, end]]) -> int
Return the lowest index in S where substring sub is found,
such that sub is contained within S[start:end]. Optional
arguments start and end are interpreted as in slice notation.
Return -1 on failure.
cadena.find("a",6)
23
cadena.find("tien")
11
cadena.count("a")
3
cadena.replace("a","-----")
'c-----den----- que tiene\n dos p-----rtes'
cadena
'cadena que tiene\n dos partes'
Expresiones regulares¶
Una cadena que contiene
Caraceteres «s» «st»
Metacaracteres \d \s \w describen secuencias
Cuantificadores + *
imoport re
re.findall(r"c",cadena)
['c']
re.split(r"a",cadena)
['c', 'den', ' que tiene\n dos p', 'rtes']
re.sub(r"a","---",cadena)
'c---den--- que tiene\n dos p---rtes'
Metacaracter \d Digito
re.findall(r"c\d",cadena)
[]
Metacaracter \D No digito
re.findall(r"c\D",cadena)
['ca']
Metacaracter \w palabra
re.findall(r"\w",cadena)
['c',
'a',
'd',
'e',
'n',
'a',
'q',
'u',
'e',
't',
'i',
'e',
'n',
'e',
'd',
'o',
's',
'p',
'a',
'r',
't',
'e',
's']
Metacaracetr \W no-palabra
re.findall(r"\W",cadena)
[' ', ' ', '\n', ' ', ' ']
cadena
'cadena que tiene\n dos partes'
re.findall(r"a\w",cadena)
['ad', 'ar']
re.findall(r"a\W",cadena)
['a ']
Metacaracter \s espacio
re.findall(r"a\s",cadena)
['a ']
Metacaracter \S no espacio
re.findall(r"a\S",cadena)
['ad', 'ar']
Cuantificador {} repetición
re.findall(r"a{2}",cadena+ "aa aar")
['aa', 'aa']
Cuantificador + uno o más
re.findall(r"\w+\s",cadena)
['cadena ', 'que ', 'tiene\n', 'dos ']
Cuantificador * cero o más
re.findall(r"\w*\s",cadena)
['cadena ', 'que ', 'tiene\n', ' ', 'dos ']
Cuantificador {n,m} por lo menos n a lo más m
re.findall(r"a{1,2}",cadena+"aa arr")
['a', 'a', 'a', 'aa', 'a']
Caracter especial ? estar o no
re.findall(r"ar?",cadena)
['a', 'a', 'ar']
Caracter especial . cualquier caraceter excepto nueva lineal
re.findall(r"a.+",cadena)
['adena que tiene', 'artes']
Caracter especial ^ comienzo de la cadena
re.findall(r"^a.+",cadena)
[]
Caracter especial $ al final de la cadena
re.findall(r"a.+$",cadena)
['artes']
Caracter especial \ para el caracter especial
re.findall(r"s?",cadena+"?")
['',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
's',
'',
'',
'',
'',
'',
'',
's',
'',
'']
re.findall(r"s\?",cadena+"?")
['s?']
Operador or |
re.findall(r"c|a",cadena)
['c', 'a', 'a', 'a']
Conjunto []
re.findall(r"[a-z]+\s",cadena)
['cadena ', 'que ', 'tiene\n', 'dos ']
Conjunto y negación
cadena
'cadena que tiene\n dos partes'
re.findall(r"a[^\s]",cadena)
['ad', 'ar']
re.findall(r"a\s",cadena)
['a ']
Agrupar ()
texto = "Ana tienen 2 primos que con los que platica. Victor tiene 3 hermanos mientras que Julio tiene 2 perros"
re.findall(r'[A-Za-z]+\s\w+\s\d+\s\w+', texto)
['Ana tienen 2 primos', 'Victor tiene 3 hermanos', 'Julio tiene 2 perros']
[A-Za-z]+ -> Ana Victor Julio
re.findall(r'([A-Za-z]+)\s\w+\s\d+\s\w+', texto)
['Ana', 'Victor', 'Julio']
res = re.findall(r'([A-Za-z]+)\s\w+\s\d+\s\w+', texto)
res[0][0]
'A'
Repeticiones
re.findall(r'(\d)+', "el numero es 55 213422")
['5', '2']
re.findall(r'(\d+)', "el numero es 55 213422")
['55', '213422']