Это мой первый вопрос в теме, заранее спасибо за вашу помощь и время, которое вы тратите на чтение меня
Я работаю под NP ++, чтобы попробовать Regex
Что я хочу
Яхотел бы преобразовать эти строки (из) в эти отформатированные строки (в) с помощью еще одного привлекательного и более умного регулярного выражения , чем у меня ниже (см. непривлекательное решение )
(от) => (до)
H04B0001240000; => H04B 1/24;
H04B0010300000; => H04B 10/30;
H04B0011301000; => H04B 11/301;
H04B0111300000; => H04B 111/30;
H04B0101303400; => H04B 101/3034;
H04B0100300010; => H04B 100/30001;
H04B0110300000; => H04B 110/30;
Как действовать?
-Для данного кода применяются следующие правила:
H04B0001240000;
-Разрезать на три части 4, 4 и 6
H04B 0001/240000;
-Снять все отступы 0 в начале второй группы (вторая группа должна содержать хотя бы одну цифру)
H04B 1/240000;
-Снять все отступы 0 в конце третьей группы (в третьей группе должно быть как минимум две цифры)
H04B 1/24;
Таким образом, считается, что бесполезные 0 находятся в начале второй группыи в конце третьей группы.Количество отступов 0s варьируется ...
Непривлекательное решение
Под NP ++ я нашел решение, которое считаю непривлекательным
В поле «Поиск»:
([A-Z])((?:0{3}([1-9]))|(?:0{2}([1-9][0-9]))|(?:0([1-9][0-9]{2})))([0-9]{2})([0-9]*[1-9])?0{1,4}(;)
В поле «Заменить»:
\1 \3\4\5\/\6\7\8
Пояснения с H04B 0001/240000;
=====================================
([A-Z])
означает одну заглавную букву от A до Z, соответствует последней букве первой группы (H04B
)
((?:0{3}([1-9]))|(?:0{2}([1-9][0-9]))|(?:0([1-9][0-9]{2})))
должен соответствовать 0002 или 0020 или 0201, но не 2011. Это касается обнаружения второй группы (0001
)
([0-9]{2})([0-9]*[1-9])?0{1,4}(;)
касается третьей группы из 6 цифр (240000
) сс намерением отбросить все отступы 0 в конце.Третья группа должна содержать не менее двух цифр ([0-9] {2})
Последний вопрос
Знаете ли вы более привлекательное и умное регулярное выражение для достижения намеченного результата?