Was ist der reguläre Ausdruck, um eine durch Kommas getrennte Liste wie diese zu validieren:
12365, 45236, 458, 1, 99996332, ......
Was ist der reguläre Ausdruck, um eine durch Kommas getrennte Liste wie diese zu validieren:
12365, 45236, 458, 1, 99996332, ......
Antworten:
Ich schlage vor, dass Sie Folgendes tun:
(\d+)(,\s*\d+)*
Dies würde für eine Liste mit 1 oder mehr Elementen funktionieren.
(^$)|(^(\d+)(,\s*\d+)*$)
könnte aber funktionieren.
"1"
oder "12345"
. Diese Liste enthält nicht mehrere Elemente, daher haben sie keine Kommas. Und Ihre Regex (\d+,)*
schreibt vor, dass auf jede Zahl ein Komma folgt.
Dieser reguläre Ausdruck extrahiert ein Element aus einer durch Kommas getrennten Liste, unabhängig vom Inhalt:
(.+?)(?:,|$)
Wenn Sie nur das Komma durch etwas anderes ersetzen, sollte es für jedes Trennzeichen funktionieren.
(.+?)(?:,\s*|$)
/expr/g
), aber anscheinend ist das nicht alles Standard. In PHP müssen Sie zum Beispiel preg_match_all()
statt verwenden preg_match()
. Andere Arten von Regex haben andere Möglichkeiten.
Es hängt ein wenig von Ihren genauen Anforderungen ab. Ich gehe davon aus: Alle Zahlen, jede Länge, Zahlen dürfen keine führenden Nullen haben und keine Kommas oder Dezimalstellen enthalten. einzelne Zahlen werden immer durch ein Komma und dann durch ein Leerzeichen getrennt, und die letzte Zahl hat KEIN Komma und kein Leerzeichen danach. Jedes dieser Fehler würde die Lösung vereinfachen.
([1-9] [0-9] *, []) * [1-9] [0-9] *
So habe ich das mental aufgebaut:
[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.
([1-9][0-9]*[ ]*,[ ]*)*[1-9][0-9]*
... vielleicht findet jemand diese nützlich
Ordnen Sie doppelte durch Kommas getrennte Elemente zu:
(?<=,|^)([^,]*)(,\1)+(?=,|$)
Referenz .
Dieser reguläre Ausdruck kann verwendet werden, um die Werte einer durch Kommas getrennten Liste aufzuteilen. Listenelemente können in Anführungszeichen, nicht in Anführungszeichen oder leer stehen. Kommas in einem Anführungszeichenpaar stimmen nicht überein.
,(?!(?<=(?:^|,)\s*"(?:[^"]|""|\\")*,)(?:[^"]|""|\\")*"\s*(?:,|$))
Referenz .
(foo|bar)
passt entweder foo
oder bar
. Für weitere Informationen: reguläre-Ausdrücke.info
Dieser lehnt überflüssige Kommas am Anfang oder Ende der Zeile ab, wenn dies für Sie wichtig ist.
((, )?(^)?(possible|value|patterns))*
Ersetzen Sie possible|value|patterns
durch einen regulären Ausdruck, der Ihren zulässigen Werten entspricht.
Möglicherweise möchten Sie die Sprache nur aus Sicherheitsgründen angeben, aber
(\d+, ?)+(\d+)?
sollte funktionieren
Ich hatte eine etwas andere Anforderung, ein verschlüsseltes Wörterbuch / eine Hashtabelle mit Kommas wie folgt zu analysieren:
"1=This is something, 2=This is something,,with an escaped comma, 3=This is something else"
Ich denke, dies ist eine elegante Lösung mit einem Trick, der viel Regex-Komplexität vermeidet:
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;
}
Ich denke, es kann mit einem Ausdruck wie @"([0-9]+),\s?"
und Analyse auf die ursprüngliche Frage angepasst werden Groups[0]
.
Ich hoffe, es ist hilfreich für jemanden und danke für die Tipps, wie man es in die Nähe bringt, besonders für Asaph!
Verwenden Sie split
in JavaScript, um zu helfen und auch negative Ziffern abzufangen:
'-1,2,-3'.match(/(-?\d+)(,\s*-?\d+)*/)[0].split(',');
// ["-1", "2", "-3"]
// may need trimming if digits are space-separated
Das Folgende stimmt mit jeder durch Kommas getrennten Kombination aus Wort, Ziffer und Leerzeichen überein
(((.)*,)*)(.)*
12365,45236,"This is a \"test."