La solución de Lieven se lleva la mayor parte del camino, y como dice en sus comentarios, solo se trata de cambiar el final a la solución de Bartek. El resultado final es la siguiente expresiones regulares de trabajo:
(?<=")\w[\w\s]*(?=")|\w+|"[\w\s]*"
de entrada: Aquí es "mi cadena" que tiene "seis partidos"
Salida:
- Aquí
- es
- "mi cadena"
- es
- tiene
- "seis partidos"
Por desgracia, es incluyendo las comillas. Si en lugar de utilizar el siguiente:
(("((?<token>.*?)(?<!\\)")|(?<token>[\w]+))(\s)*)
y explícitamente capturar el "token" partidos de la siguiente manera: salida
RegexOptions options = RegexOptions.None;
Regex regex = new Regex(@"((""((?<token>.*?)(?<!\\)"")|(?<token>[\w]+))(\s)*)", options);
string input = @" Here is ""my string"" it has "" six matches"" ";
var result = (from Match m in regex.Matches(input)
where m.Groups[ "token" ].Success
select m.Groups[ "token" ].Value).ToList();
for (int i = 0; i < result.Count(); i++)
{
Debug.WriteLine(string.Format("Token[{0}]: '{1}'", i, result[ i ]));
}
Depuración:
Token[0]: 'Here'
Token[1]: 'is'
Token[2]: 'my string'
Token[3]: 'it'
Token[4]: 'has'
Token[5]: ' six matches'
es "un delimitador partido? Iow, no hola" mundo" Count durante 1 o 2 partidos? –
Buena pregunta .. yo creo que sería –