Inicio › Foros › Lenguajes de programación, desarrollo, código fuente › .Net C# VB y PowerShell › Obtener DNI NIF de texto sin formato con C# y expresiones regulares [RESUELTO]
Etiquetado: .net, c sharp, c#, cadena, cadena de texto, csharp, dni, expresión regular, expresiones, expresiones regulares, extraer, get, nie, nif, regex, regulares, resuelto, solución, solucionado, solved, string, texto
- Este debate tiene 4 respuestas, 2 mensajes y ha sido actualizado por última vez el hace 3 años por Varios.
-
AutorEntradas
-
05/16/2023 a las 08:31 #48735VariosModerador
Hola, tengo un texto sin formato, de este estilo:
ORGANICACIÓN\nIMPORTE TOTAL FACTURACIÓN\n\nHORAS TOTALES\n16-05-2023\nControl de Stock Almacén\n7\4557\nPeríodo del 01 de enero de 2023 al 31 de diciembre de 2023\n45785444JSALARIO USUARIO 1.536,41\nSTOCK POR USUARIO 22,3
Como se puede observar, no tiene un formato ni una forma rápida para obtener el NIF/DNI del usuario, que en el ejemplo sería 45785444J. Me han hablado de las expresiones regulares en C Sharp (C#) ¿cómo puede obtenerse ese valor de DNI dentro de ese texto sin formato en C#?
El texto lo obtengo extrayendo texto de ficheros PDF, no puedo obtenerlo de otra forma.
05/16/2023 a las 12:15 #48736alonsojpdSuperadministradorHola, te paso una expresión regular (RegEx) que te puede servir:
TeX1\b((([X-Z])|([LM])){1} ([-]?)((\d){7})([-]?)([A-Z]{1}))|((\d{8})([-]?)([A-Z]))Además, esta expresión te sirve tanto para DNI/NIF (del tipo 12345678A como para NIE (del tipo X1234567X).
05/16/2023 a las 12:17 #48737VariosModeradorOk ¿cómo puedo usar esa expresión regular en C#?
05/16/2023 a las 12:20 #48738alonsojpdSuperadministradorUn ejemplo de código C# que utiliza esa expresión regular para obtener el DNI/NIF/NIE de una cadena de texto:
C#123456789String dni = "";String textoPDF = "";textoPDF = leerPDF("C:\mipdf.pdf");Regex regDNI = new Regex(@"\b((([X-Z])|([LM])){1}([-]?)((\d){7})([-]?)([A-Z]{1}))|((\d{8})([-]?)([A-Z]))");Match matDNI = regDNI.Match(textoPDF);if (matDNI.ToString() == "")dni = "No encontrado";elsedni = matDNI.ToString();05/16/2023 a las 12:32 #48739VariosModeradorPerfecto, me funciona bien. He quitado los guiones porque no los usamos, he dejado:
C#1Regex regDNI = new Regex(@"\b((([X-Z])|([LM])){1}((\d){7})([A-Z]{1}))|((\d{8})([A-Z]))");Y no tenemos NIE, por lo que lo he reducido a:
C#1Regex regDNI = new Regex(@"\b((\d{8})([A-Z]))");¡Muchas gracias!
-
AutorEntradas
- Debes estar registrado para responder a este debate.