如何识别文本中的.onion链接,记住它们可以以各种方式进入;用于识别文本中的.onion链接的方法?
hfajlhfjkdsflkdsja.onion
http://hfajlhfjkdsflkdsja.onion
http://www.hfajlhfjkdsflkdsja.onion
我想正则表达式,但(.*?.onion)
将返回全款,其中URL链接被埋葬在
如何识别文本中的.onion链接,记住它们可以以各种方式进入;用于识别文本中的.onion链接的方法?
hfajlhfjkdsflkdsja.onion
http://hfajlhfjkdsflkdsja.onion
http://www.hfajlhfjkdsflkdsja.onion
我想正则表达式,但(.*?.onion)
将返回全款,其中URL链接被埋葬在
这将做到这一点:(?:https?://)?(?:www)?(\S*?\.onion)\b
(由非捕获组 - 信用:@WiktorStribiżew)
演示:
s = '''hfajlhfjkdsflkdsja.onion
https://hfajlhfjkdsflkdsja.onion
http://www.hfajlhfjkdsflkdsja.onion
https://www.google.com
https://stackoverflow.com'''
for m in re.finditer(r'(?:https?://)?(?:www)?(\S*?\.onion)\b', s, re.M | re.IGNORECASE):
print(m.group(0))
输出
hfajlhfjkdsflkdsja.onion
https://hfajlhfjkdsflkdsja.onion
http://www.hfajlhfjkdsflkdsja.onion
您可以使用'\ S'而不是'[^ \ s]'。 在开始时还使用'?'在这种情况下是无用的,并使正则表达式更复杂。 '(http(s)?://)?(www)?([^ \ s] *?\。洋葱)'等于'\ S *?\。洋葱' – Szymon
@Szymon这将防止错误积极的像'大声笑... imAn.onion'。 –
不过,我同意,'\ S'比'^ \ s'更简洁。 –
的方法没有正则表达式:
url = 'http://hfajlhfjkdsflkdsja.onion'
split = url.split('.onion')
if len(split)==2 && len(split[1])==0:
%do something
如何处理“这是一个链接:blahblah.onion”?它会分成“这是一个链接:blahblah”。 –
它会将它分成['这是一个链接:blahblak',''],然后你输入if结构。 – SeaMonkey
尽管OP想要“blahblah”部分。不是其余的。 –
方便快捷:
([^\s]+\.onion)
比赛从第一空间,直到 “.onion” 开始的所有字符。
1.无需将整个正则表达式放在'()'中,因为它是已经是一个组(0)。 2.而不是'[^ \ s]'使用\ S。它会匹配'www.onion.com'上的'www.onion' – Szymon
尝试'\ S + \。洋葱\ b'。但是,如果链接包含空格,这将无济于事。 –
你必须找到永远在链接之前的东西,永远不会出现在链接中。像@WiktorStribiżew建议的那样,你可以使用空白字符。 – Szymon
嗨@WiktorStribiżew我在这里尝试了这个正则表达式https://regex101.com/r/5ArhNJ/2它似乎并没有捕获它 – user3191569