проверка 2-й части выражения - это приращение 1-й - PullRequest
0 голосов
/ 28 мая 2020

В частности, я хочу создать Reg Ex для налогового года в формате yyyy / yy, где 2019/20 будет соответствовать налоговому году с 06.04.2019 по 05.04.2020.

Итак, базовый c reg ex, который у нас есть, это ^2[0-9]{3}-[0-9]{2}$, который работает для обеспечения правильности формата, но допускает такие, как 2019-30 или 2019-18 et c, когда единственным возможным окончанием 2019 года является 20.

Так кто-нибудь знает, как я могу проверить, что секция после "/" была двумя последними цифрами секции 1, увеличенными на 1? Если бы это было 100% правильным, то это также должно было бы учитывать 2099/00 для 2099/2100.

Итак, допустимые примеры будут включать: 2001/02, 2002/03 ... 2010 / 11, 2012/13, 2099/00 полностью до 2999/00

Недействительным будет все, где 2 раздела не совсем +1 разные, например: 2010/12, 2100/10 , 2010/09, 2019/19 и т. Д. c

Любые указатели для этого будут оценены.

1 Ответ

0 голосов
/ 28 мая 2020

файл f1

2012/13
2012/02
2012/12
2199/00
2199/11

скрипт f1.awk

match($1, /2[0-9]([0-9]{2})/, m) {
  if (($2 == m[1]+1) || (m[1] == 99 && $2 == "00")) {
    print($1"/"$2)
  } 
}

вызов:

gawk -F"/" -f f1.awk f1

результат:

2012/13
2199/00

Пояснение :

-F"/"     sets / as field separator
m[1]      is a reference to a group of 2 numbers set in regex
IF        checks the assumed condition 
          and takes into account the special case 99/00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...