Мне нужно найти, если строка отформатирована следующим образом:
text1,x%;text2,y%
Итак, эти строки должны быть действительными:
example, 10%; test, 22%; another, 90%
another example, 11.5%; yet other example, 91%
another, 11%; other example, 11.2%
example2, 20%
И следующее должно быть недействительным:
example3; 10%, test3, 22%; another3, 90%
example4; 20%
example5, 11%; test 5, 123%
another fail example, 11,5%; yet other example, 91%
Я знаю некоторое регулярное выражение, но это подтверждение я даже не знаю, как начать.
EDIT: добавлено больше примеров.
Вы можете использовать следующее регулярное выражение:
^[\w\s]+,\s*\d+(?:\.\d+)?%(?:;\s*[\p{L}\s]+,\s*\d+(?:\.\d+)?%)*$
См. Демонстрацию
Объяснение Regex:
В основном, он состоит из двух частей: один из них ;
и остальные необязательные последовательности.
^
- Начало строки[\w\s]+
- 1 или более буквенно-цифровых или пробельных символов, за которыми следуют...,
- запятая, затем\s*
- необязательные пробелы\d+(?:\.\d+)?%
- число с плавающей точкой или целое число (десятичная часть является необязательной из-за ?
) И знак процента(?:;\s*[\p{L}\s]+,\s*\d+(?:\.\d+)?%)*
- вторая часть, которая соответствует 0 или более последовательностям... ;\s*
- полуколона с последующим необязательным пробелом[\p{L}\s]+
- 1 или более букв (\p{L}
) или пробелов,\s*
- запятая, а затем необязательные пробелы\d+(?:\.\d+)?%
- число с плавающей точкой или целое число (десятичная часть не обязательна) и знак процента$
- Конец строки[\p{L}\s]+
во второй части.
anything, anything;
-anything, anything;
-anything, anything;
?example2, 20%
проходит,example4; 20%
нет.