Cómo extraer el contenido de corchetes en una cadena de texto en c # usando Regex

StackOverflow https://stackoverflow.com/questions/1811183

  •  06-07-2019
  •  | 
  •  

Pregunta

si tengo una cadena de texto como la que se muestra a continuación, ¿cómo puedo recopilar el contenido de los corchetes en una colección en C # incluso si pasa por saltos de línea?

por ejemplo ...

string s = "test [4df] test [5yu] test [6nf]";

debería darme ..

colección [0] = 4df

colección [1] = 5yu

colección [2] = 6nf

¿Fue útil?

Solución

Puede hacer esto con expresiones regulares y un poco de Linq.

    string s = "test [4df] test [5y" + Environment.NewLine + "u] test [6nf]";

    ICollection<string> matches =
        Regex.Matches(s.Replace(Environment.NewLine, ""), @"\[([^]]*)\]")
            .Cast<Match>()
            .Select(x => x.Groups[1].Value)
            .ToList();

    foreach (string match in matches)
        Console.WriteLine(match);

Salida:

4df
5yu
6nf

Esto es lo que significa la expresión regular:

\[   : Match a literal [
(    : Start a new group, match.Groups[1]
[^]] : Match any character except ]
*    : 0 or more of the above
)    : Close the group
\]   : Literal ]

Otros consejos

Regex regex = new Regex(@"\[[^\]]+\]", RegexOptions.Multiline);

La clave es escapar correctamente de los caracteres especiales utilizados en las expresiones regulares, por ejemplo, puede hacer coincidir un carácter [ de esta manera: @ " \ ["

Regex rx = new Regex(@"\[.+?\]");
var collection = rx.Matches(s);

Deberá recortar los corchetes, la parte importante es el operador perezoso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top