Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

202
Vistas
Encuentre una expresión regular para obtener subcadenas con extensiones de archivo

Hay varias variantes de las cuerdas:

  1. "txt files `(*.txt)|*.txt|All files (*.*)|*.*`"
  2. "Image Files`|*.jpg;*.jpeg;*.png;`"
  3. "Excel Files `(*.xls, *.xlsx)|*.xls;*.xlsx|CSV Files (*.csv)|*.csv`"

La subcadena puede terminar con cualquier carácter (space, ',', '.', '|', ';') - no importa.

Probé las siguientes opciones: " [^*].{3,4}(.?);", "[^*]+.(.?); ".

Necesito una expresión regular para obtener string[] = {.jpg, .jpeg, ...} , preferiblemente sin elementos duplicados.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

¿ Realmente necesitas una expresión regular?

En primer lugar, si se divide por | , cada entrada impar en el resultado es una lista de extensiones. Luego puede dividir eso nuevamente por ; para obtener las extensiones, que luego puede aplanar en una sola secuencia y recortar cada elemento del * inicial. Finalmente, obtenga el conjunto distinto de eso y póngalo en una matriz.

Todo esto se puede lograr con Split y Linq:

 var extensions = filter.Split('|', StringSplitOptions.RemoveEmptyEntries) .Where((x, i) => i % 2 != 0) .SelectMany(x => x.Split(';', StringSplitOptions.RemoveEmptyEntries)) .Select(x => x.TrimStart('*')) .Distinct() .ToArray();

Eliminar las entradas vacías de la división garantiza que, si termina con un separador, se ignore.

Véalo en acción en .NET Fiddle .

over 4 years ago · Santiago Trujillo Denunciar

0

Sus cadenas de ejemplo parecen consistir en una parte inicial opcional entre paréntesis seguida de una tubería | y luego las extensiones.

Si desea hacer coincidir el formato de los datos, puede usar un grupo de captura con el mismo nombre y la propiedad Group.Captures .

 \b[fF]iles\b[^*()]*(?:\([^()]*\))?\|\*(?<ext>\.[\w*]+)(?:[,;]\*(?<ext>\.[\w*]+))*

En partes, el patrón coincide:

  • \b[fF]iles\b Coincide con archivos o Archivos
  • [^*()]* Opcionalmente coincide con cualquier carácter excepto * ( )
  • (?:\([^()]*\))? Opcionalmente, haga coincidir una parte entre paréntesis
  • \|\* Partido |*
  • (?<ext>\.[\w*]+) Grupo con nombre ext , match . y 1+ veces una palabra char o *
  • (?: grupo de no captura
    • [,;]\* Coincide con , o ; seguido de *
    • (?<ext>\.[\w*]+) Mismo patrón para grupo ext
  • )* Cierre el grupo de no captura y, opcionalmente, repítalo para obtener todas las extensiones

Vea una demostración de C# regex 101 y una demostración de C# .

Por ejemplo

 string pattern = @"\b[fF]iles\b[^*()]*(?:\([^()]*\))?\|\*(?<ext>\.[\w*]+)(?:[,;]\*(?<ext>\.[\w*]+))*"; string input = @"txt files `(*.txt)|*.txt|All files (*.*)|*.*` Image Files`|*.jpg;*.jpeg;*.png;` Excel Files `(*.xls, *.xlsx)|*.xls;*.xlsx|CSV Files (*.csv)|*.csv`"; var strings = Regex.Matches(input, pattern) .SelectMany(m => m.Groups["ext"].Captures.Select(c => c.Value)) .ToArray() .Distinct(); foreach (var s in strings) { Console.WriteLine(s); }

Producción

 .txt .* .jpg .jpeg .png .xls .xlsx .csv

Otro patrón más corto no relacionado con el formato de los datos, emparejando un punto y 3 o 4 caracteres de palabra o un asterisco y afirmando un punto a la izquierda:

 (?<=\*)\.(?:\w{3,4}\b|\*)

Vea otra demostración de expresiones regulares .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda