Regex来捕获url直到某个ch

2024-06-01 04:50:43 发布

您现在位置:Python中文网/ 问答频道 /正文

使用诸如

https://search.yahoo.com/search?p=Fetty+Wap&fr=fp-tts&

我正在使用

pat = re.compile('<a href="(https?://.*?)".*',re.DOTALL)

作为一种搜索模式。在

我想选择任何一个url,比如上面的yahoo url,但是我想捕获实际url中的?的url。在

{{1>不想把所有的url都提取出来。在这种情况下,我需要捕获所有的url。在

上面的regex可以工作并提取url,但会转到url的末尾。我怎样才能让它在它遇到的第一个?处停下来,如果它没有遇到?,我该怎么做呢


Tags: httpsrecomurlsearchfryahootts
1条回答
网友
1楼 · 发布于 2024-06-01 04:50:43

上面的泡泡解决方案对我很管用

“您可以使用否定类:]*?href=“(http[^”?]+)“<;-bobbles回答。在

url如下所示

https://search.yahoo.com/search?p=Justin+Bieber&fr=fp-tts&fr2=p:fp,m:tn,ct:all。。。。。。在

也可能是这样 https://www.yahoo.com/style/5-joyful-bob-ross-tees-202237009.html

目标是提取完整的网址,如果没有文字?但如果它真的停在文字之前?。在

是波波泡泡回答和工作非常干净,做了我想做的,再次感谢大家参加这次讨论,真的很感谢。在

网友
2楼 · 发布于 2024-06-01 04:50:43

我同意另一个答案,即在这里使用regexp并不是一个解决方案,特别是因为在打开<a>标记和href参数之前,有许多参数,所以在这两者之间也可能有一个新行。在

但是,回答最初的问题:

“*”、“+”和“?”限定符都是贪婪的-它们匹配尽可能多的文本

这就是为什么有非贪婪的版本:

“*?”, '+?' 还有“??”在

网友
3楼 · 发布于 2024-06-01 04:50:43

Regex确实是一个错误的工具。基本的分裂你会得到一个基本的字符串。在

def beforeQuestionMrk(inputStr):
    return inputStr.split("?")[0]

url = "https://search.yahoo.com/sometext"
url2 = "https://search.yahoo.com/search?p=Fetty+Wap&fr=fp-tts&"

print(beforeQuestionMrk(url))
print(beforeQuestionMrk(url2))

#https://search.yahoo.com/sometext
#https://search.yahoo.com/search

如果您真的想使用regex,我想您可以执行以下操作:

^{pr2}$

相关问题 更多 >