正则表达式:首次出现两种模式之间的文本

时间:2012-12-22 13:44:20

标签: regex

  

/url?q=http://it.wikipedia.org/wiki/Spider-Man_(膜)及SA = U&安培; EI = iavVUKuFGsrNswbz74GQBA&安培; VED = 0CBYQFjAA&安培; USG = AFQjCNEth5YspFPWp6CInyAfknlEvVgIfA

我需要得到

  

http://it.wikipedia.org/wiki/Spider-Man_(film

我试过\?q=(.*)& 但它考虑到&的最后一次出现,所以我得到了

  

http://it.wikipedia.org/wiki/Spider-Man_(film)&sa=U&ei=iavVUKuFGsrNswbz74GQBA&ved=0CBYQFjAA

http://rubular.com/r/yBiGIMQTUV

4 个答案:

答案 0 :(得分:11)

您需要使用不情愿的匹配来匹配到第一个&。使用贪婪匹配(即使用*而不是*?),您的模式将匹配尽可能长的字符串,以满足完整模式。

所以使用它: -

\?q=(.*?)&

或者你也可以使用带有否定&的字符类,它匹配除&之外的每个字符: -

\?q=([^&]*)

请注意,如果您不希望(.*?)匹配空字符串,则应使用+量词。它匹配1 or more次出现。

答案 1 :(得分:2)

您只需要使*运算符变得懒惰,然后在其后添加?即可。所以它会是.*?

懒惰(或非贪婪)意味着在第一次出现该匹配后将停止,而不是最后一次。

答案 2 :(得分:1)

尝试:

\?q=([^&]+)

并捕获第一组。

答案 3 :(得分:0)

如果你的in python然后sub(r'(\/url\?q\=)|[&][\S]*','',url)应该做你的工作