delimitado ¿Cuál es la expresión regular para validar una lista separada por comas, como éste:expresión regular para comas lista
12365, 45236, 458, 1, 99996332, ......
delimitado ¿Cuál es la expresión regular para validar una lista separada por comas, como éste:expresión regular para comas lista
12365, 45236, 458, 1, 99996332, ......
sugiero que hagas de la siguiente manera:
(\d+)(,\s*\d+)*
que trabajaría para una lista que contiene 1 o más elementos.
tienes razón, tuve que pelar un primer personaje antes de que pudiera usar la expresión regular, gracias a todos por ayudar – everLearningStudent
esto parece estar funcionando solo hasta la primera coma ... – ondrobaco
@ondrobaco: Probablemente solo estás inspeccionando el primer grupo de partidos. El siguiente grupo de partidos contendrá el resto de la lista. – Asaph
Partido duplicar los elementos delimitados por comas:
(?<=,|^)([^,]*)(,\1)+(?=,|$)
Esta expresión regular se puede utilizar para dividir los valores de una lista delimitada por comas. Los elementos de la lista pueden ser citados, sin comillas o vacíos. Las comas dentro de un par de comillas no coinciden.
,(?!(?<=(?:^|,)\s*"(?:[^"]|""|\\")*,)(?:[^"]|""|\\")*"\s*(?:,|$))
¿Qué hace allí exactamente el símbolo de la tubería (|)? Es el símbolo que no se explica en el página a la que se vincula, y no puedo encontrarle sentido. –
@ThomasVanderStichele: Es por alternancia. '(foo | bar)' coincide con 'foo' o' bar'. Para más información: http: // www. regular-expressions.info/alternation.html –
Es posible que desee especificar el idioma sólo para estar seguro, pero
(\d+, ?)+(\d+)?
debe trabajar
Esta solución falla para una lista que contiene solo 1 elemento. Vea mi solución a continuación. – Asaph
Depende un poco de sus necesidades exactas. Estoy asumiendo que: todos los números, cualquier longitud, los números no pueden tener ceros a la izquierda ni contienen comas o puntos decimales. los números individuales siempre separados por una coma y luego un espacio, y el último número NO tiene una coma y espacio después. Cualquiera de estos errores simplificaría la solución.
([1-9][0-9]*,[ ])*[1-9][0-9]*
Así es como he construido que mentalmente:
[0-9] any digit.
[1-9][0-9]* leading non-zero digit followed by any number of digits
[1-9][0-9]*, as above, followed by a comma
[1-9][0-9]*[ ] as above, followed by a space
([1-9][0-9]*[ ])* as above, repeated 0 or more times
([1-9][0-9]*[ ])*[1-9][0-9]* as above, with a final number that doesn't have a comma.
gracias por el rápido tutorial – everLearningStudent
Encontré esta respuesta realmente útil, solo necesitaba un pequeño ajuste para aceptar espacios en blanco antes y después de la coma '([1-9] [0-9] * [] *, [] *) * [1-9] [0-9] * '... tal vez alguien encuentre este útil – pollirrata
Me gusta este ejemplo, ¿cómo permitiré los saltos de línea después de esto? – justinpees
/^\d+(?:, ?\d+)*$/
utilicé esto para una lista de elementos que tenían que ser alfanuméricos sin guiones bajos en la parte frontal de cada elemento.
^(([0-9a-zA-Z][0-9a-zA-Z_]*)([,][0-9a-zA-Z][0-9a-zA-Z_]*)*)$
tuve un requisito ligeramente diferente, para analizar un diccionario/tabla hash codificado por comas escapado, así:
"1=This is something, 2=This is something,,with an escaped comma, 3=This is something else"
Creo que esta es una solución elegante, con un truco que evita muchos de la complejidad de expresiones regulares:
if (string.IsNullOrEmpty(encodedValues))
{
return null;
}
else
{
var retVal = new Dictionary<int, string>();
var reFields = new Regex(@"([0-9]+)\=(([A-Za-z0-9\s]|(,,))+),");
foreach (Match match in reFields.Matches(encodedValues + ","))
{
var id = match.Groups[1].Value;
var value = match.Groups[2].Value;
retVal[int.Parse(id)] = value.Replace(",,", ",");
}
return retVal;
}
Creo que se puede adaptar a la pregunta original con una expresión como @"([0-9]+),\s?"
y analizar en Groups[0]
.
Espero que sea útil para alguien y gracias por los consejos para conseguirlo cerca de allí, ¡especialmente Asaph!
Éste rechazará comas extrañas al principio o al final de la línea, si eso es importante para usted.
((,)?(^)?(possible|value|patterns))*
Reemplazar possible|value|patterns
con una expresión regular que coincide con sus valores permitidos.
Esta expresión regular extrae un elemento de una lista separada por comas, independientemente de su contenido:
(.+?)(?:,|$)
Si acaba de cambiar la coma con algo más, que debería funcionar para cualquier delimitador.
En JavaScript, utilice split
para ayudar, y al quemar cualquier dígito negativos, así:
'-1,2,-3'.match(/(-?\d+)(,\s*-?\d+)*/)[0].split(',');
// ["-1", "2", "-3"]
// may need trimming if digits are space-separated
personajes nunca lo habrá escapado, como: '12365,45236, "Este es un \" prueba ". ' – ceejayoz
¿Por qué tiene que ser una expresión regular? Dependiendo del idioma, es mejor que utilices un analizador de CSV incorporado. –