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']