Cómo extraer el contenido de corchetes en una cadena de texto en c # usando Regex
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
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