【问题标题】:Regex: extract characters from two patterns正则表达式:从两个模式中提取字符
【发布时间】:2022-01-08 04:22:10
【问题描述】:

我有以下字符串:

https://www.google.com/today/sunday/abcde2.hopeho.3345GETD?weatherType=RAOM&...
https://www.google.com/today/monday/jbkwe3.ho4eho.8495GETD?weatherType=WHTDSG&...

我想提取jbkwe3.ho4eho.8495GETDabcde2.hopeho.3345GETD{weekday}/?weatherType= 之间的任何内容。

我尝试过(?<=sunday\/)$.*?(?=\?weatherType=),但它只适用于第一行,我想让它适用于所有字符串,无论{weekday} 的值如何。

我尝试了(?<=\/.*\/)$.*?(?=\?weatherType=),但没有成功。任何熟悉正则表达式的人都可以提供帮助吗?谢谢!

[更新] 我是正则表达式的新手,但我正在通过我认为应该是 PCRE 的“查找”功能在崇高的文本编辑器上对其进行试验(根据 this post

【问题讨论】:

    标签: regex sublimetext3


    【解决方案1】:

    试试这个正则表达式:

    (?:sun|mon|tues|wednes|thurs|fri|satur)day\/\K[^?]+(?=\?weatherType)
    

    Click for Demo

    Link to Code


    说明:

    • (?:sun|mon|tues|wednes|thurs|fri|satur)day - 匹配星期几,即sunday,monday,tuesday,wednesday,thursday,friday,saturday
    • \/ - 匹配 /
    • \K - 取消匹配到目前为止匹配的任何内容,并假装匹配从 current position 开始。这可用于 PCRE。
    • [^?]+ - 匹配 1 次或多次出现的非 ? 的任何字符
    • (?=\?weatherType) - 上面的子模式[^?]+ 将匹配所有不是? 的字符,直到它到达一个紧跟? 后跟weatherType 的位置

    要使匹配不区分大小写,您可以在正则表达式前面加上(?i),如图所示here

    【讨论】:

      【解决方案2】:

      在给出的示例中,您实际上只需要抓取最后一个正斜杠(“/”)和第一个问号(“?”)之间的字符。

      您没有提及您正在使用的 flavor 正则表达式(即 PCRE、grep、Oracle 等),实际语法会有所不同,但一般来说,类似于以下 (Perl) 替换正则表达式将处理给出的示例:

      s/.*\/([^?]*)\?.*/$1/gm
      

      还有其他(并且更有效)的方法,但这样就可以了。

      【讨论】:

      • 谢谢,起初我不知道有这么多类型的正则表达式。我刚刚更新了我的帖子。
      猜你喜欢
      • 2018-06-23
      • 2021-10-19
      • 2018-11-22
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多