Presto - Регулярное выражение для извлечения ID из URL - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть несколько URL, для которых мне нужно разобрать параметр ID.

В Presto я использовал url_extract_path, чтобы сузить область поиска, так что теперь у меня есть такие строки:

1. /LIVERPOOL-HOTELS-THE-LINER-HOTEL.H1858765.HOTEL-INFORMATION
2. /AVON-GORGE-HOTEL.H444059.HOTEL-INFORMATION
3. /NORTH-YORKSHIRE-HOTELS-ST-HILDAS-BOUTIQUE.H7265545.HOTEL-INFORMATION    

Я хочу извлечь число после .H, поэтому дляпример 1858765 для # 1.

Может ли кто-нибудь предложить регулярное выражение для этого в preso?

1 Ответ

0 голосов
/ 11 февраля 2019

Используйте шаблон '\\.H([0-9]+)', это означает буквально '.H' и одну или несколько цифр, извлеките группу захвата 1 (в скобках):

hive> select regexp_extract('/LIVERPOOL-HOTELS-THE-LINER-HOTEL.H1858765.HOTEL-INFORMATION','\\.H([0-9]+)',1);
OK
_c0
1858765
Time taken: 0.152 seconds, Fetched: 1 row(s)
hive> select regexp_extract('/AVON-GORGE-HOTEL.H444059.HOTEL-INFORMATION','\\.H([0-9]+)',1);
OK
_c0
444059
Time taken: 0.094 seconds, Fetched: 1 row(s)
hive> select regexp_extract('/NORTH-YORKSHIRE-HOTELS-ST-HILDAS-BOUTIQUE.H7265545.HOTEL-INFORMATION','\\.H([0-9]+)',1);
OK
_c0
7265545
Time taken: 0.056 seconds, Fetched: 1 row(s)

Вам необходимо экранировать символ точки для Presto с одинарной обратной косой чертой '\.H(\d+)':

select regexp_extract('LIVERPOOL-HOTELS-THE-LINER-HOTEL.H1858765.HOTEL-INFORMATION','\.H(\d+)',1);

Результат:

1858765

Также вы можете использовать \d+ вместо [0-9]+ как в Hive, так и в Presto

...