Capítulo 3 – Buscando, Modificando y codificando texto

 
Lección 1 – Formando Expresiones regulares
Una expresión regular es un conjunto de caracteres que pueden ser comparados con un string para determinar si este cumple con los requerimientos especificados en la expresión.
Soportan caracteres especiales y operadores, como por ejemplo: .
* ? + [ ] ( ) { } ^ $ | \.
Los más usados comúnmente son “^” para indicar el comienzo de la cadena, “$” para indicar el final, “?” para indicar un carácter opcional, “.”para indicar cualquier carácter y “*” para indicar un carácter repetido.

. coincide con cualquier carácter individual
* coincide con cero o más elementos anteriores
+ coincide con uno o varios elementos anteriores
? coincide con cero o uno de los elementos anteriores
() recuerda el contenido del paréntesis como elemento
[] coincide con un elemento de la lista
- crea un intervalo en una lista
| o
^ coincide con el principio del campo
$ coincide con el final del campo
\ usa caracteres de escape con cualquiera de los elementos anteriores
 
Como usar expresiones regulares para el pattern matching?
Para usar las expresiones regulares, se debe referenciar System.Text.RegularExpressions . Usando el método estático Regex.IsMatch se puede comprobar si una cadena cumple un patrón dado.
Ejemplo de expresión regular:
^\d{5}$
Significa
^ Comienzo del string, si es multilínea, va a matchear con cada línea
$ Fin del string, si es multilinea, va a matchear con cada línea
\d significa dígitos numéricos
{5} significa que debe haber cinco dígitos numéricos secuenciales.
A continuación un cuadro un poco más explicativo y con ejemplos…

Carácter
Significado
Ejemplo
\
Indica que el siguiente carácter normal debe ser considerado como especial. También se utiliza como carácter de escape para los caracteres especiales.
/\n/ encuentra un salto de línea. Si se desea buscar el carácter '\', habrá que utilizar /\\/
^
Se utiliza para encontrar el comienzo de una línea.
/a/ encuentra una 'a' en cualquier lugar, pero /^a/ haya una coincidencia con el carácter 'a' si se encuentra al comienzo de una línea.
$
Se utiliza para encontrar el final de una línea.
*
Encuentra coincidencia del caracter que le precede cuando aparece 0 o más veces en la cadena.
/hola*/ encuentra coincidencias en las cadena "hol", "hola" y "holaaaa".
+
Igual que el '*', pero cuando el caracter aparece 1 o más veces.
?
Igual que el '*', pero cuando el caracter aparece 0 o 1 vez.
.
Se utiliza para encontrar cualquier caracter que no sea un caracter de nueva línea.
/.sa/ encontrará coincidencias en las cadenas "casa", "cosa" y "cesa", pero no en "asa".
(x)
Encuentra coincidencias con 'x', y recuerda el patrón para su posterior utilización.
x|y
Encuentra coincidencia si aparece el caracter 'x' o el caracter 'y'.
{n}
Encuentra coincidencia si hay exactamente n apariciones del caracter que precede.
Por ejemplo, /a{3}/ encuentra coincidencia en "holaaa", pero no en "holaa".
{n,}
Encuentra coincidencia si hay al menos n apariciones del caracter que precede.
{n,m}
Encuentra coincidencia si hay como mínimo n y com máximo m apariciones del caracter que precede.
[xyz]
Representa un conjunto de caracteres individuales.
/[aeiou]/ encuentra coincidencias con cualquier vocal. Si se utiliza el caracter '-' se pueden definir rangos. Por ejemplo, /[0-3]/ encuentra coincidencias si aparecen en la cadena los caracteres '0', '1', '2' o '3'.
[^xyz]
Representa un conjunto de caracteres individuales complementario. Encunetra coincidencias con aquellos caracteres que NO aparezcan en el conjunto. Al igual que en el caso anterior, con el '-' se pueden definir rangos.
[\b]
Encuentra coincidencia con el caracter de retroceso.
\b
Encuentra coincidencias con los límites de las palabras.
Por ejemplo, /\bola/ encuentra la cadena "ola" en "Viene una ola", pero no en "Viene una cola".

Las expresiones regulares son muy útiles para filtrar el input del usuario. Pueden ser usadas para machear con patterns complejos.

Ejemplo de dirección de e-mail.

Lo vamos a ir analizando de a poco…Guiño
Primero, una expresión regular delimita su inicio con /^ y su fin con $/. Por lo tanto tendría la forma:
/^ Expresión $/

Un email se compone de tres partes:
Nombre usuario + @ + servidor + dominio
 
Nombre de usuario y el servidor
Ambos deben empezar por una letra o número (\w) y por lo menos debe aparecer una vez (+), puede contener o no (?) Puntos y guiones (\ .-) y terminar con letras y números \w+. Esto se puede repetir cero o varias veces (los puntos, guiones y letras), por lo tanto se coloca entre ()*, para ambos casos quedaría:
\w+ ([\.-]?\w+)*
 

Dominio
Va al final, detrás de un punto y puede tener 2,3 o 4 letras ({2,3,4})
Además se pueden tener varios dominios seguidos (.com.ar) por eso debemos poner (+).
Su expresión regular queda:
(\.\w{2,3,4})+
 
Uniendo todo, la expresión regular final sería:
/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3,4})+$/
 
Aclaración: El tema es un poco más largo, pero creo que con el ejemplo anterior, la idea se entiende, 
igualmente les recomiendo entren acá para ver que otros caracteres especiales se pueden usar, y otras opciones de configuración.
 

Lección 2 - Codificando y decodificando
Cada string y texto es codificado usando diferentes estándares de codificación.
Existen diferentes tipos de codificación:
  • ASCII: asigna caracteres para 7-bit bytes usando los números desde el 0 al 127. Al inicio no incluía los caracteres que no estaban en el alfabeto inglés (solo tenía letras del alfabeto ingles en mayúscula y minúscula, números, puntuación, y algún otro carácter especial de control).
  • ANSI: (de 8-bit byte) tuvo una solución para este problema y utilizo del 0 al 127 los códigos ASCII y los demás, desde el 128 al 255, para otros valores específicos del lenguaje elegido.
  • Unicode: es una codificación de páginas masiva, con miles de caracteres que soportan muchos lenguajes y scripts. No es de un tipo específico de codificación, existen varios tipos. El framework de .Net utiliza Unicode UTF-16 para representar caracteres y a veces UTF-8 internamente.
System.Text soporta las siguientes codificaciones:
  • UTF-32.- Utiliza UTF32Encoding para convertir desde y hacia un UTF-32
  • UTF-16.- Utiliza Unicode Encoding para convertir desde y hacia un UTF-16
  • UTF-8.- UTF8 Encoding
  • ASCII.- Codifica el alfabeto latino. Utiliza ASCII Encoding
  • ANSI/ISO.- Encoding

Usando Encoding Class (clases de codificacion)

Se puede usar el método Encoding.GetEncoding para devolver un objeto encoding para una especificada codificación.
Encoding.GetBytes convierte un string unicode a su representación en bytes en una codificación especificada.
Encoding.GetEncodings obtiene un arreglo de EncodingInfo que soporta el framework.
image
 
Como especificar el tipo de codificación cuando escribimos un archivo?
Para especificar el tipo de codificación cuando se escribe un archivo, se usa una sobrecarga de su constructor que acepta el objeto Encoding. Ejemplo:

image
Encoding es una enumeración que contiene opciones como: Default, UTF32, UTF7, UTF8, ASCII, etc.
 
Como especificar el tipo de codificación cuando leemos una archivo?
Se realiza de la misma manera, suplantando streamWhiter por StreamReader, el constructor del StreamReader posee una sobrecarga en donde se le debe pasar: nombre del archivo, tipo de codificación, y un parámetro de tipo bool, detectEncodingFromByteOrderMarks  que detecta la codificación examinando los tres primeros bytes de la secuencia.

Ejemplo:
image




....................................................................................................................................................
Bajar esta capítulo en formato PDF                                                                Codigo Ejemplo
....................................................................................................................................................

No hay comentarios:

Publicar un comentario