POSIX регулярное выражение для строки версии - PullRequest
0 голосов
/ 13 марта 2020

У меня есть источник, на котором у меня нет контроля, и я хочу отфильтровать всю строку, в которой есть несколько символов. Например Из этих:

9
8.1.0
5.0
9.0
5.1
8.0.0
7.0 (cdfsdsdsd)
5.0.2
8
7.0.1
7.1
6.0
7.0
Over 32323
7.0 rdx K9 bnsm
9.2.3
8.oo
pp
unknown
8.0_vgfe10051988
6.0.1
8.0.0-derv10051988
9.1
9.0.0
8.0.1
7.0_xccv10051988
7.1.3
10.0
7.0.X.1.C
8.0.0_vged10051988
4.4.4
7.1.2
7.0 [NKL 24 | ABC]
8.1
7.1.1
5.1.1
7.0_Jgrd10051988
9.XXX
9.0.1
8.0
5.0.1
8.1.1
10

Из них мне нужны только те строки, состоящие только из цифр и.

9
8.1.0
5.0
9.0
5.1
8.0.0
5.0.2
8
7.0.1
7.1
6.0
7.0
9.2.3
6.0.1
9.1
9.0.0
8.0.1
7.1.3
10.0
4.4.4
7.1.2
8.1
7.1.1
5.1.1
9.0.1
8.0
5.0.1
8.1.1
10

Я пробовал много регулярных выражений, но ничего не кажется обобщенным c достаточно, это регулярное выражение также дает [0-9]*.?[0-9] строк. У меня работает ^(\*|\d+(\.\d+){0,2}(\.\*)?)$, но это не POSIX.

Как мне получить POSIX, который также работает в Redshift?

Ответы [ 3 ]

0 голосов
/ 14 марта 2020

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

Согласно Amazon Redshift "Операторы POSIX" ,

Amazon Redshift поддерживает следующие операторы Perl в регулярных выражениях. Выйдите из оператора, используя две обратные косые черты ('\\').

Итак, вы можете использовать

'^(\\*|\\d+(\\.\\d+){0,2}(\\.\\*)?)$'
0 голосов
/ 15 марта 2020

Самое простое:

^[.0-9]+$

Если у вас нет поддержки расширенного регулярного выражения, вы можете сделать:

^[.0-9][.0-9]*$

Я выполнил эту команду на ваших входах и выходах и получил пустой diff:

$ diff <(grep -P '^[.0-9]+$' input) output
$ echo $?
0

На вашем указанном входе c сработает даже ^[.0-9]*$.

Обратите внимание, однако, что есть разница между строками "только с цифрами и . "и" строка версии ". Простое регулярное выражение также будет перехватывать входные данные, такие как:

1..2
..
.
0...
.1

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

0 голосов
/ 13 марта 2020

Если посмотреть на документ Amazon, кажется, что POSIX ERE поддерживается Redshift. Тогда, пожалуйста, попробуйте:

^[[:digit:]]+(\.[[:digit:]]+)*$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...