{"id":46,"date":"2020-05-29T17:22:45","date_gmt":"2020-05-29T17:22:45","guid":{"rendered":"https:\/\/www.pythonparatodo.com\/?p=46"},"modified":"2020-05-30T09:53:00","modified_gmt":"2020-05-30T09:53:00","slug":"expresiones-regulares","status":"publish","type":"post","link":"https:\/\/www.pythonparatodo.com\/?p=46","title":{"rendered":"Expresiones regulares"},"content":{"rendered":"\n<p>Las expresiones regulares son secuencias de caracteres que se comportan como un patr\u00f3n de b\u00fasqueda y que facilitan la b\u00fasqueda en cadenas de caracteres. En estas secuencias de caracteres se usa la barra invertida para indicar formas especiales o para a\u00f1adir caracteres<\/p>\n\n\n\n<p>Para usar las expresiones regulares en Python es necesario importar el m\u00f3dulo <strong>re<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">import re<\/code><\/pre>\n\n\n\n<p>Para comenzar a usar el m\u00f3dulo es necesario saber c\u00f3mo construir las expresiones regulares o patrones de b\u00fasqueda. Estos son algunos de los mas usados:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>regex<\/strong><\/td><td><strong>Descripci\u00f3n<\/strong><\/td><td><strong>Ejemplo<\/strong><\/td><\/tr><tr><td>^<\/td><td>Lo que se busca tiene que estar al principio de la l\u00ednea.<\/td><td>Busca cualquier palabra que comience por zo y que tenga alg\u00fan car\u00e1cter detr\u00e1s que no sea un espacio en blanco: \u2018^zo\\S*\u2019<\/td><\/tr><tr><td>$<\/td><td>Al final de la l\u00ednea.<\/td><td>.*o\u2019<\/td><\/tr><tr><td>.<\/td><td>Cualquier car\u00e1cter.<\/td><td>Busca<\/td><\/tr><tr><td>*<\/td><td>Cero o mas caracteres de lo que le digamos anteriormente<\/td><td>&nbsp;<\/td><\/tr><tr><td>+<\/td><td>Igual que * pero de un car\u00e1cter o mas.<\/td><td>&nbsp;<\/td><\/tr><tr><td>\\s<\/td><td>Cualquier espacio en blanco.<\/td><td>&nbsp;<\/td><\/tr><tr><td>\\S<\/td><td>Cualquier car\u00e1cter distinto de un espacio en blanco.<\/td><td>&nbsp;<\/td><\/tr><tr><td>[a-z]<\/td><td>Cualquier car\u00e1cter de la a a la z en min\u00fasculas.<\/td><td>&nbsp;<\/td><\/tr><tr><td>[A-Z]<\/td><td>Cualquier car\u00e1cter de la A a la Z en may\u00fasculas.<\/td><td>&nbsp;<\/td><\/tr><tr><td>[0-9]<\/td><td>Cualquier n\u00famero.<\/td><td>&nbsp;<\/td><\/tr><tr><td>[a-zA-Z0-9]<\/td><td>Cualquier car\u00e1cter en min\u00fasculas, may\u00fasculas o cualquier n\u00famero.<\/td><td>&nbsp;<\/td><\/tr><tr><td>[.]<\/td><td>El punto.<\/td><td>&nbsp;<\/td><\/tr><tr><td>\\w<\/td><td>Cualquier car\u00e1cter alfanum\u00e9rico.<\/td><td>&nbsp;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>El siguiente ejemplo dividir\u00e1 una frase en palabras y se buscar\u00e1n todas las palabras que comiencen por \u2018mu\u2019. El patr\u00f3n es <strong>^<\/strong> que indica que lo viene detr\u00e1s tiene que estar al principio de la l\u00ednea, luego <strong>mu<\/strong> seguido de <strong>.+<\/strong>, es decir lo que comience por mu y contenga al menos un car\u00e1cter detr\u00e1s \u2018^mu.+\u2019. El resultado de la b\u00fasqueda con el patr\u00f3n es murci\u00e9lago.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">>>> import re\n>>> texto = 'El veloz murci\u00e9lago hind\u00fa com\u00eda feliz cardillo y kiwi.'\n>>> patron = '^mu.+'\n>>> textosplit = texto.split()\n>>> for palabra in textosplit:\n...     busqueda = re.findall(patron,palabra)\n...     if len(busqueda) > 0:\n...             print(busqueda)\n... \n['murci\u00e9lago']<\/code><\/pre>\n\n\n\n<p>Se pueden usar los siguientes m\u00e9todos para buscar con expresiones regulares.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">match(patr\u00f3n, cadena, flags=0)<\/h2>\n\n\n\n<p>Aplica el patr\u00f3n al principio de la cadena, devolviendo el objeto coincidente con el patr\u00f3n, en caso negativo devuelve None.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">fullmatch(patr\u00f3n, cadena, flags=0)<\/h2>\n\n\n\n<p>A diferencia de match, fullmatch aplica el patr\u00f3n a toda la cadena en vez de s\u00f3lo al principio.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">search(patr\u00f3n, cadena, flags=0)<\/h2>\n\n\n\n<p>Busca el patr\u00f3n a trav\u00e9s de la cadena devolviendo el objeto coincidente, en caso de no encontrar nada devuelve None.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">>>> texto = \"El veloz zorro marr\u00f3n salt\u00f3 sobre el perro peresozo\"\n>>> re.search('zorro',texto)\n&lt;re.Match object; span=(9, 14), match='zorro'>\n>>> texto[9:14]\n'zorro'<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">findall(patr\u00f3n, cadena, flags=0)<\/h2>\n\n\n\n<p>Devuelve una lista de todas las ocurrencias en la cadena. Si hay grupos en los patrones y se encuentran resultados, se devuelven listas de grupos en forma de listas de tuplas.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">>>> import re\n>>> texto = \"El veloz zorro marr\u00f3n salt\u00f3 sobre el perro peresozo. Si que era r\u00e1pido el zorro.\"\n>>> re.findall('zorro',texto)                                              \n['zorro', 'zorro']<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">sub(patr\u00f3n, reemplazo, cadena, contador=0, flags=0)<\/h2>\n\n\n\n<p>Devuelve la cadena obtenida tras, sustituir en la cadena pasada, por la parte izquierda, el patr\u00f3n por su reemplazo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">>>> import re\n>>> cadena = \"Eso si que es un cami\u00f3n\"\n>>> cadenarepl = re.sub('cam','av',cadena)\n>>> print(cadenarepl)\nEso si que es un avi\u00f3n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">subn(patr\u00f3n, reemplazo, cadena, contador=0, flags=0)<\/h2>\n\n\n\n<p>Es igual que sub, pero tambi\u00e9n devuelve el n\u00famero de sustituciones que ha hecho. El resultado se obtiene en una tupla con 2 valores, la cadena obtenida y el n\u00famero de veces que se ha realizado el reemplazo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">>>> import re\n>>> cadena = \"Eso si que es un cami\u00f3n. El cami\u00f3n de tus sue\u00f1os.\"\n>>> cadenarepl = re.subn('cam','av',cadena)\n>>> print(cadenarepl)\n('Eso si que es un avi\u00f3n. El avi\u00f3n de tus sue\u00f1os.', 2)<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">split(patr\u00f3n, cadena, maxsplit=0, flags=0)<\/h2>\n\n\n\n<p>Divide una cadena en base a las ocurrencias del patr\u00f3n, elimin\u00e1ndolas de la lista. Si el patr\u00f3n se incluye entre par\u00e9ntesis tambi\u00e9n se incluye en el resultado. Si maxsplit es diferente a cero se produce un m\u00e1ximo de maxsplit ocurrencias.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">>>> import re\n>>> texto = \"El veloz zorro marr\u00f3n salt\u00f3 sobre el perro peresozo\"\n>>> listasin = re.split('zorro|perro',texto)\n>>> listasin\n['El veloz ', ' marr\u00f3n salt\u00f3 sobre el ', ' peresozo']\n>>> listasin = re.split('\\s',texto)\n>>> listasin\n['El', 'veloz', 'zorro', 'marr\u00f3n', 'salt\u00f3', 'sobre', 'el', 'perro', \u2018peresozo']<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Las expresiones regulares son secuencias de caracteres que se comportan como un patr\u00f3n de b\u00fasqueda y que facilitan la b\u00fasqueda &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[20,2,6],"class_list":["post-46","post","type-post","status-publish","format-standard","hentry","category-python","tag-expresiones-regulares","tag-python","tag-python3"],"_links":{"self":[{"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts\/46","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=46"}],"version-history":[{"count":4,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts\/46\/revisions"}],"predecessor-version":[{"id":57,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts\/46\/revisions\/57"}],"wp:attachment":[{"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=46"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=46"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=46"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}