Предположим, у меня есть текстовый файл с некоторыми данными, которые я хочу восстановить, потерянными в море обычного письменного языка.
Каждый фрагмент данных, который я хочу получить, представляет собой набор из 3 чисел от 0 до 99 (который я будувызовите номера от N1 до N3), которые можно отформатировать 4 разными способами:
N1-N2-N3
N1N2N3
N1.N2.N3
N1/N2/N3
Можно ли с помощью регулярных выражений описать что-то подобное:
Что-то, что я назову separator
, позже будет что-то в этом списке: [ '-', '', '.', '/' ]
Мое выражение лица такое: N1{separator}N2{same_separator_as_the_first_one}N3
?
Кажется, что единственный способ выразить это:
Мое выражение выглядит так: ({N1}-{N2}-{N3}) OR ({N1}{N2}{N3}) OR ({N1}.{N2}.{N3}) OR ({N1}/{N2}/{N3})
... который быстро становится нечитаемым ...
Можно ли получить выражение первого типа с помощью регулярных выражений?Есть ли что-то доступное, не являющееся регулярным выражением, которое допускает такую выразительность?
Реальный вопрос:
Учитывая доступные форматы, каков наилучший способ написать функцию, котораяполучает строку и возвращает от N1 до N3 вместе с используемым символом-разделителем (и выдает исключение, если строка не соответствует ни одному формату)?