Регулярное выражение Python: использование чередования для наборов слов с разделителем
Я хочу сопоставить строку, для которой строковые элементы должны содержать только определенные символы:
- Первый персонаж из [A,C,K,M,F]
- Затем следует число (число с плавающей точкой или целое число). Допустимые случаи: 1,2,5,3,6,9,0,6,3 и т. Д.
- Окончание любой из этих римских цифр [I, II, III, IV, V].
Регламент, который я поставляю, следующий
bool(re.match(r'(A|C|K|M|F){1}\d+\.?\d?(I|II|III|IV|V)$', test_str))
"(I|II|III|IV|V)"
часть вернет истину для test_str='C5.3IV'
но я хочу, чтобы это было правдой, даже если две римские цифры присутствуют одновременно с разделителем /
т. е. запрос регулярного выражения должен возвращаться к истине для test_str='C5.3IV/V'
также.
Как я должен изменить регулярное выражение?
Спасибо
2 ответа
Попробуй это:
bool(re.match(r'[ACKMF]\d+\.?\d?(I|II|III|IV|V)(/(I|II|III|IV|V))*$', test_str))
Я также изменил начало вашего выражения с (A|C|K|M|F){1}
в [ACKMF]
Символы в квадратных скобках образуют класс символов. Такой класс соответствует одному символу из ряда вариантов. Вы чаще всего видите их с такими диапазонами, как [A-Z0-9]
чтобы соответствовать заглавным буквам или цифрам, но вы также можете добавить отдельные символы, как я сделал для вашего регулярного выражения.
Сгруппируйте разделитель и римскую цифру и обращайтесь с ней так же, как с десятичной точкой в выражении с плавающей запятой / int (вы не знаете, будет ли он отображаться или нет, но он появится только один раз). Надеюсь это поможет!