Как извлечь регулярное выражение через Redshift PSQL - PullRequest
0 голосов
/ 08 мая 2018

Тот же шаблон регулярных выражений, который я пробовал на python и Redshift psql, работает на python, но не на Redshift psql.

У меня строки выглядят так: s = 'AB.w127 xyz (9f6h, 89) amf, like mr .345x980 abcd' Я хочу извлечь все между "AB" и ".345x980" ("w127 xyz (9f6h, 89) amf, как и mr" в этом случае), умноженные числа здесь будут различаться, а содержимое в между совершенно непредсказуемо. Так что в моем psql-запросе Redshift я использовал regexp_substr(s, 'AB\.(.*?)\.\d+x\d+.*?'). Я надеялся получить хоть что-нибудь, чтобы потом я мог использовать group(1) в качестве логики Python.

Но Redshift продолжал показывать мне эту ошибку:

Недопустимое предыдущее регулярное выражение перед оператором повторения. Произошла ошибка при разборе регулярного выражения: 'AB. (. ? >>> ЗДЕСЬ >>>). D + xd +. ?'.

Я также попробовал шаблон AB\\.(.*?)\\.\\d+x\\d+.*?'), но все равно получил ту же ошибку.

Есть ли способ извлечь строку с помощью Redshift psql?

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Действительно ценю ответы! Наконец проблема решена с regexp_replace(s, 'AB\.|\.\\d+x\\d+.*'), здесь я должен был использовать \\d, иначе Redshift дал мне пустой результат

0 голосов
/ 08 мая 2018

К сожалению, в Amazon Redshift есть только регулярное выражение POSIX , которое не поддерживает ленивые квантификаторы.

Тем не менее, похоже, что они вам не нужны, AB\.(.*)\.\d+x\d+ должно подойти.


Что касается вашего вопроса, как извлечь промежуточный текст, у нас очень мало вариантов с функцией регулярных выражений Redshift. Все Большая часть хорошего материала не поддерживается. Вероятно, лучше сначала извлечь, а затем использовать CHARINDEX и SUBSTRING для изоляции внутренней части.

Однако, один последний трюк использует

regexp_replace( text, '.*AB\.|\.\\d+x\\d+.*') 

Как указано в связанной документации, классы символов \ d в стиле POSIX должны использовать две обратные косые черты (\\) или использовать эквивалентное выражение класса символов, например, [[:digit:]]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...