【问题标题】:Presto - Regular Expression for extracting ID from urlPresto - 用于从 url 中提取 ID 的正则表达式
【发布时间】:2019-07-04 19:34:10
【问题描述】:

我有一些需要解析出 ID 参数的 URL。

在 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。

有人可以为此建议一个正则表达式吗?

【问题讨论】:

    标签: regex hive presto


    【解决方案1】:

    使用'\\.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)
    

    您需要用单个反斜杠 '\.H(\d+)' 屏蔽 Presto 的点字符:

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

    结果:

    1858765
    

    您还可以在 Hive 和 Presto 中使用 \d+ 而不是 [0-9]+

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      • 2011-05-15
      • 1970-01-01
      • 2023-03-09
      相关资源
      最近更新 更多