【问题标题】:Regex a 13 digit number in the middle of a URL正则表达式 URL 中间的 13 位数字
【发布时间】:2015-04-07 02:04:45
【问题描述】:

我正在使用 Kimono Labs 抓取一堆网站。我想从我使用 Kimono 生成的 HTML 属性的 URL 中提取单个 ID。 Kimono 只允许这种格式的正则表达式 -

/^()(.*?)()$/

我有一堆这种代表性格式的网址 -

http://www.abcde.com/inferno-english/p/itmdzhspdfkfszyk?pid=9780593072493&srno=b_3&ref=e32b55b4-b0b0-413d-b76c-a41ad93247a5

我用什么正则表达式来提取 "pid=" 后面的 13 位数字?

【问题讨论】:

  • \d 表示数字,{} 表示金额:pid=\d{13} ?

标签: regex web-scraping


【解决方案1】:
pid=(\d{13})

你可以使用这个。查看演示。

http://regex101.com/r/dM0rS8/1

【讨论】:

  • 谢谢——但和服为此抛出了一个空白结果。 (这也是我最初尝试过的)。我不确定它是否与和服为正则表达式指定的确切格式有关。他们说中间括号生成的内容是最终被取走的内容。请看这个——vimeo.com/98827385
  • @melony 中括号是什么意思?
  • 规定格式有三对括号——参考第二对
  • @melony 括号似乎是正确的。试试 `pid=([0-9]{13})
【解决方案2】:

使用积极的向后看:

(?<=pid=)\d{13}

在这里演示:http://regex101.com/r/bA0jG5/1

【讨论】:

    【解决方案3】:

    组索引 1 包含 13 位数字,它出现在 pid= 之后,

    /^.*?pid=(\d+).*$/
    

    DEMO

    要获得准确的 13 位数字,

    /^.*?pid=(\d{13}).*$/
    

    DEMO

    【讨论】:

    • 为什么要投反对票? OP 仅在示例本身中表示 13 位。
    【解决方案4】:

    Kimono 语法需要使用 3 组括号,因此您需要执行以下操作:

     /(pid=)(\d{13})()/ 

    您也可以联系支持人员,他们会为您创建正则表达式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-14
      • 1970-01-01
      • 2021-03-30
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      相关资源
      最近更新 更多