Регулярное выражение с начальным нулем



Я довольно новичок в регулярных выражениях и нуждаюсь в помощи с простым выражением. Я использую Pentaho для ETL (Replace in String transformation), и у меня есть значения столбцов, которые мне нужно добавить ведущие нули и разобрать текст как часть импорта базы данных. До сих пор мне не удалось добавить ведущий ноль.



Столбец называется регион , а значения - "регион 8", "регион 10", "регион 11" . Мое регулярное выражение - это ['регион'], который будет исключите текст региона, но получите результаты = "8", "10", "11". Мне нужны ценности для производства "08", "10", "11". Таким образом, все однозначные числа должны иметь начальные нули.

441   5  

5 ответов:

Используйте взгляд вперед в два шага:

Regex 1:   region (?=\d\D)
Replace 1: 0

Regex 2:   region (?=\d\d)
Replace 2: (nothing)

Взгляд вперед не потребляет много времени, поэтому вам не нужно беспокоиться о обратных ссылках и т. д.

s/^region[0-9][0-9]$/region
s/^region\([1-9]\)$/region0\1

Вы должны использовать обратные ссылки и множественные проверки, но это возможно. Вот пример использования 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

    Ничего не найдено.