Регулярное выражение с начальным нулем
Я довольно новичок в регулярных выражениях и нуждаюсь в помощи с простым выражением. Я использую Pentaho для ETL (Replace in String transformation), и у меня есть значения столбцов, которые мне нужно добавить ведущие нули и разобрать текст как часть импорта базы данных. До сих пор мне не удалось добавить ведущий ноль.
Столбец называется регион , а значения - "регион 8", "регион 10", "регион 11" . Мое регулярное выражение - это ['регион'], который будет исключите текст региона, но получите результаты = "8", "10", "11". Мне нужны ценности для производства "08", "10", "11". Таким образом, все однозначные числа должны иметь начальные нули.
5 ответов:
Используйте взгляд вперед в два шага:
Regex 1: region (?=\d\D) Replace 1: 0 Regex 2: region (?=\d\d) Replace 2: (nothing)Взгляд вперед не потребляет много времени, поэтому вам не нужно беспокоиться о обратных ссылках и т. д.
Вы должны использовать обратные ссылки и множественные проверки, но это возможно. Вот пример использования JavaScript:
Первый шаг состоит в том, чтобы удалить все нецифровые символы"region 8".replace(/\D/g, '').replace(/^(\d)$/, '0$1'); //returns "08" "region 18".replace(/\D/g, '').replace(/^(\d)$/, '0$1'); //returns "18" "region 188".replace(/\D/g, '').replace(/^(\d)$/, '0$1'); //returns "188".replace(/\D/g, '')и заменить любые одиночные цифры на 0, за которым следует сам. Вы можете сделать это с помощью обратной ссылки ($1):.replace(/^(\d)$/, '0$1')
Пример Javascript с использованием анонимной функции для проверки значения захваченного числа и добавления
0к возвращаемому значению, если оноcolumn = "region 8"; column.replace(/region (\d+)/, function(s, p1){return parseInt(p1) < 10 ? '0' + p1 : p1});Функция принимает всю согласованную строку
sи захваченную частьp1в качестве параметров
Способ perl сделать это:
while(<DATA>) { chomp; s/\D+//g; printf("%02d\n", $_); } __DATA__ region 8 region 10 region 11Вывод:
08 10 11
Comments