¿Cómo seleccionar todos los números de la siguiente cadena?
str = "1,2, 4,5 ,6 7 8 9 10, 11, 13"
Intenté usar split(',') pero no funciona para espacios.
Como contiene espacios también.
Simplemente haga una expresión regular y haga coincidir los números
console.log("1,2, 4,5 ,6 7 8 9 10, 11, 13".match(/\d+/g).map(Number));split puede tomar una expresión regular . Entonces puede darle una expresión regular que defina de manera sólida su sintaxis delimitadora. (... que puede ser similar pero ligeramente diferente para otros que lean esta pregunta, por eso estoy proporcionando esta respuesta).
Sospecho que en realidad querrá permitir como máximo 1 coma, con espacios en blanco opcionales antes y después, o 1 o más espacios. Pero, por ejemplo, sospecho que no se interpretarán dos o más comas como un solo delimitador, sino más bien como un error en el texto de entrada. Por ejemplo, puede ser deseable interpretar 1,,2 como [1, 0, 2] . (Después de todo, en JavaScript, Number("") es 0 ). Depende completamente de la sintaxis que elija por sí mismo.
Tal expresión regular podría ser:
(?:\s*,\s*)|\s+
Están pasando muchas cosas aquí:
?: grupo que no captura.\s*,\s* tiene que aparecer antes de \s+ en la construcción de alternancia ( | ) porque debe combinarse con avidez para formar el delimitador más largo (para incluir la coma en el delimitador si hay uno, y no solo el espacio antes de eso).3.14 , -1 , 1.21e9 , 0x42 , Infinity , etc. console.log("1,2, 4,5 ,6 7 8 9 10, 11, 13".split(/(?:\s*,\s*)|\s+/).map(Number)); Si ,, que sea un delimitador único, la expresión regular podría ser simplemente [,\s]+
Sin usar expresiones regulares:
string str = "1,2, 4,5 ,6 7 8 9 10, 11, 13"; List<string> list = str.Replace(" ", ",").Split(',').ToList(); list.RemoveAll(x => x == string.Empty);La lista contiene: 1,2,4,5,6,7,8,9,10,11,13