En este artículo se vera como generar aplicaciones basadas en expresiones regulares para extraer información de interés para su futura manipulación.
Muchas veces necesitamos desarrollar un procedimiento o función que extraiga información importante de un documento de texto, por ejemplo los URLS de una página Web para generar un Spider o Robot. Gracias al uso de expresiones regulares crear este tipo de aplicaciones es bastante sencillo.
En el siguiente ejemplo se hará uso de los espacios de nombre (Namespaces).
Desde Visual Studio 2005.
Generar una forma Windows
Para este código se utilizara el Espacio de Nombres System, System.Data, System.Net, System.Text, System.Text.RegularExpressions y System.Collections
' Versión VB .Net Imports System Imports System.Net Imports System.Text Imports System.Text.RegularExpressions Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim listadoURL As New ArrayList() listadoURL = UrlList("http://www.e-mision.net/crazyhouse") End Sub Public Function UrlList(ByVal url As String) As ArrayList ' Se crea un arreglo de bytes Dim resultHTML() As Byte ' Se crea un objeto de la clase ArrayList Dim linksArray As New ArrayList ' Se crea un objeto de la clase WebClient class Dim myWebClient As New WebClient ' Se extrae el contenido HTML del url proporcionado por el usuario resultHTML = myWebClient.DownloadData(url) ' Crear un objeto UTF8 que describe como esta codificado el contenido de la página Dim utf8Enc As New UTF8Encoding ' Se obtiene la codificación UTF8 del resultado resultHTML Dim myResultString As String = utf8Enc.GetString(resultHTML) ' Se convierte el resultado a minúsculas para facilitar el uso de la expresión regular. myResultString = myResultString.ToLower() ' Se genera una expresión regular para revisar y extraer los URL Dim regularexpre As New Regex("href\s*=\s*(?:(?:\(?[^\]*)\)|(?[^\s]* ))") ' Extraer aquellas cadenas que cumplen con la expresión y se almacenan en una colección Dim collectionurls As MatchCollection = regularexpre.Matches(myResultString) ' Se adicionan las cadenas(URLs) al arreglo For Each res As Match In collectionurls For Each t As Group In res.Groups linksArray.Add(t.Value) Next Next ' Se retorna el arreglo Return linksArray End Function End Class
// Versión C# using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Net; using System.Text.RegularExpressions; using System.Collections; namespace WindowsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { ArrayList listadoURL = new ArrayList(); listadoURL = UrlList("http://www.e-mision.net/crazyhouse"); } public ArrayList UrlList(string url) { // Se crea un arreglo de bytes byte[] resultHTML; // Se crea un objeto de la clase ArrayList ArrayList linksArray = new ArrayList(); // Se crea un objeto de la clase WebClient class WebClient myWebClient = new WebClient(); // Se extrae el contenido HTML del url proporcionado por el usuario resultHTML = myWebClient.DownloadData(url); // Crear un objeto UTF8 que describe como esta codificado el contenido de la página UTF8Encoding utf8Enc = new UTF8Encoding(); // Se obtiene la codificación UTF8 del resultado resultHTML string myResultString = utf8Enc.GetString(resultHTML); // Se convierte el resultado a minúsculas para facilitar el uso de la expresión regular. myResultString = myResultString.ToLower(); // Se genera una expresión regular para revisar y extraer los URL Regex regularexpre = new Regex("href\s*=\s*(?:(?:\(?[^\]*)\)|(?[^\s]* ))"); // Extraer aquellas cadenas que cumplen con la expresión y se almacenan en una colección MatchCollection collectionUrls = regularexpre.Matches(myResultString); // Se adicionan las cadenas(URLs) al arreglo foreach (Match res in collectionUrls) { foreach (Group t in res.Groups) { linksArray.Add(t.Value); } } // Se retorna el arreglo return linksArray; } } }
Con este ejemplo se ha aprendido como utilizar expresiones regulares para manipular información relevante.
Publicado en http://www.programar.net por Rubén Darío Sánchez