Co to jest wyrażenie regularne do sprawdzania poprawności rozdzielany przecinkami listę jak ten:Regex dla rozdzielany przecinkami listę
12365, 45236, 458, 1, 99996332, ......
Co to jest wyrażenie regularne do sprawdzania poprawności rozdzielany przecinkami listę jak ten:Regex dla rozdzielany przecinkami listę
12365, 45236, 458, 1, 99996332, ......
Proponuję zrobić w następujący sposób:
(\d+)(,\s*\d+)*
która będzie działać na liście zawierającej 1 lub więcej elementów.
masz rację, musiałem usunąć pierwszą postać, zanim mogłem skorzystać z regex, dziękuję wszystkim za pomoc – everLearningStudent
to wydaje się działać tylko do pierwszego przecinka ... – ondrobaco
@ondrobaco: Prawdopodobnie tylko kontroluje pierwsza grupa dopasowania. Następna grupa dopasowania będzie zawierała resztę listy. – Asaph
Mecz duplikatów rozdzielany przecinkami:
(?<=,|^)([^,]*)(,\1)+(?=,|$)
To wyrażenie może służyć do dzielenia wartości listy rozdzielanej przecinkami. Elementy listy mogą być cytowane, niecytowane lub puste. Przecinki wewnątrz pary cudzysłowów nie są dopasowane.
,(?!(?<=(?:^|,)\s*"(?:[^"]|""|\\")*,)(?:[^"]|""|\\")*"\s*(?:,|$))
Co dokładnie oznacza symbol potoku (|)? Jest to jeden z symboli nieobjaśnionych w strona, do której prowadzi link, i nie mogę tego zrozumieć –
@ThomasVanderStichele: Jest na przemian. '(foo | bar)' pasuje do 'foo' lub' bar'. Więcej informacji: http: // www. regularne-expressions.info/alternation.html –
Możesz też określić język, dla pewności, ale
(\d+, ?)+(\d+)?
powinien pracować
To rozwiązanie kończy się niepowodzeniem dla listy zawierającej tylko 1 element. Zobacz moje rozwiązanie poniżej. – Asaph
To zależy trochę na swoich konkretnych wymagań. Zakładam: wszystkie liczby, dowolna długość, liczby nie mogą mieć początkowych zera ani zawierać przecinków ani kropek dziesiętnych. poszczególne liczby zawsze oddzielone przecinkiem od spacji, a ostatnia liczba NIE zawiera przecinka i spacji. Każde z tych błędów byłoby uproszczenie rozwiązania.
([1-9][0-9]*,[ ])*[1-9][0-9]*
Oto jak zbudowałem że psychicznie:
[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.
dziękuję za szybki samouczek. – everLearningStudent
Znalazłem tę odpowiedź naprawdę użyteczną, po prostu potrzebowałem drobnej korekty, aby zaakceptować spacje przed i po przecinku '([1-9] [0-9] * [] *, [] *) * [1-9] [0-9] * '... może ktoś uzna to za przydatne – pollirrata
Najbardziej podoba mi się ten przykład, w jaki sposób mogę zezwolić na łamanie linii? – justinpees
/^\d+(?:, ?\d+)*$/
Użyłem tego dla listy przedmiotów, które musiały być alfanumeryczne bez podkreśleń na początku każdej pozycji.
^(([0-9a-zA-Z][0-9a-zA-Z_]*)([,][0-9a-zA-Z][0-9a-zA-Z_]*)*)$
miałem nieco inny wymóg, aby zanalizować zakodowany słownik/hashtable ze zbiegłych przecinkami, na przykład:
"1=This is something, 2=This is something,,with an escaped comma, 3=This is something else"
Myślę, że to eleganckie rozwiązanie, z trick, który pozwala uniknąć wielu z regex złożoności:
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;
}
Myślę, że może być dostosowany do pierwotnego pytania z wyrazem jak @"([0-9]+),\s?"
i analizować na Groups[0]
.
Mam nadzieję, że komuś to pomoże, a dzięki za wskazówki, jak to zrobić, zwłaszcza Asaph!
Ten odrzuci obce przecinki na początku lub na końcu linii, jeśli jest to dla ciebie ważne.
((,)?(^)?(possible|value|patterns))*
Wymień possible|value|patterns
z regex pasującej do dozwolonych wartości.
Ten regex wydobywa element z listy oddzielone przecinkami, niezależnie od zawartości:
(.+?)(?:,|$)
Jeśli po prostu zastąpić przecinek z czegoś innego, to powinno działać na każdym ogranicznik.
W JavaScript, użyj split
pomóc i złapać żadnych negatywnych cyfry, a także:
'-1,2,-3'.match(/(-?\d+)(,\s*-?\d+)*/)[0].split(',');
// ["-1", "2", "-3"]
// may need trimming if digits are space-separated
Czy będzie kiedykolwiek uciekły znaków, takich jak: '12365,45236 "To jest \" test„. ' – ceejayoz
Dlaczego musi to być wyrażenie regularne? W zależności od języka może być lepiej za pomocą wbudowanego analizatora składni CSV –