Что было бы лучшим регулярным выражением в C# для проверки нижеследующего условия?Регулярное выражение для диапазона страниц
1, 2-10,5-10,6,9-100 - это что-то вроде номеров страниц, указанных как диапазон или отдельные, разделенные запятыми.
Что было бы лучшим регулярным выражением в C# для проверки нижеследующего условия?Регулярное выражение для диапазона страниц
1, 2-10,5-10,6,9-100 - это что-то вроде номеров страниц, указанных как диапазон или отдельные, разделенные запятыми.
Попробуйте следующее выражение:
\d+(?:-\d+)?(?:,\d+(?:-\d+)?)*
Обратите внимание, что модель является довольно хрупким, что он не допускает каких-либо пробелов, как есть.
Идея строится вокруг главного подмаски \d+(?:-\d+)?
:
\d+
- соответствует один или несколько последовательных цифр (либо автономно или в качестве левой границы диапазона)-\d+
- Совпадение знак минуса, за которым следуют одна или несколько цифр (граница правого диапазона)Обратный знак вопроса делает знак минус d дополнительная граница диапазона (которая также должна совпадать с номерами одной страницы); (?:)
обозначает non-capturing group.
этоi безупречный. Благодаря! – user2325247
@ user2325247 Рад, что я мог помочь. Пожалуйста, подумайте о принятии этого ответа, если он решит вашу проблему! –
Это регулярное выражение будет соответствовать каждому диапазону страниц по отдельности:
\d+-\d+|\d+
Я чередование для достижения этой цели. В случае, если \d+-\d+
(диапазон номеров страниц) не согласован, он просто будет соответствовать единственному, бесконечному числу \d+
.
Если вы столкнулись с любыми символами между диапазонами страниц, кроме -
, вам нужно будет изменить регулярное выражение.
Это регулярное выражение не позволяет использовать запятую между номерами по запросу. – DavidRR
Он сказал «разделен запятыми». Если я сопоставляю запятые, диапазоны страниц не будут раздельными. Если ему нужен каждый диапазон страниц, который должен быть помечен запятой, он может использовать регулярное выражение: '\ d + - \ d +, | \ d +,' –
Это будет соответствовать '1' или' 12' или '12,' или '12 -345, 'индивидуально. Моя интерпретация вопроса заключается в том, что OP хочет сопоставить ** последовательность ** разделенных запятыми отдельных номеров или диапазонов (например, «1,3-5,6,7-12') и определить, будет ли вся целая последовательность ** действует. – DavidRR
Когда я вырезать и вставить строку образца, я заметил, что пространство следует 1,
в самом начале:
1, 2-10,5-10,6,9-100
^
Я не знаю, если это было сделано намеренно, но я думаю, что это разумно чтобы один или несколько символов пробега были запятыми.
Это говорит, вот регулярное выражение, который будет соответствовать вашим требованиям:
^[0-9]+(?:(?:\s*,\s*|-)[0-9]+)*$
^^^^^^ ^^^^^^^^^^^^^^^
A B1 B2 C D
^^^^^^^^^
B
A - One or more digits
B1 - A comma with optional space characters on either side, *OR*
B2 - A dash (without whitespace on either side)
C - One or more digits
D - Optionally repeat B and C
Примечание:\d
и [0-9]
являются не эквивалент; предыдущие совпадения all Unicode digits. Я предположил, что вас интересуют только цифры 0
через 9
.
Это «строка»? Если это так, вы можете использовать 'String.Split (',')' также .. –
Требования кажутся неясными. Разрешаете ли вы отдельным страницам смешивать диапазоны, разделенные запятыми? –
Игнорируя, что это для javascript, и проблема заключалась в том, чтобы ускользнуть от обратной косой черты, вот что я обнаружил в google для меня: http://stackoverflow.com/questions/4468336/javascript-regular-expression-page-range-validation – moritzpflaum