【问题标题】:Extract URLS with or without "#..." in them from text file从文本文件中提取带有或不带有“#...”的 URL
【发布时间】:2015-08-12 06:25:58
【问题描述】:

免责声明:我知道以前有很多关于这类事情的问题,如果这是一个骗子,请标记它或直接给我链接&我可以删除这篇文章。


半免责声明:我不熟悉正则表达式,所以我不能自己做:/


我有一个看起来像这样的文件:

asd<a href="http://asd.asd.asd#asd">asd</a>
asd<a href="https://asd.asd.asd#asd">asd</a>

这么多 asd,因为我不知道:

  • httphttps
  • www. 或其他内容
  • #something 或者什么都没有

我希望脚本获取这个文件,比如 input.txt,提取所有 url,使用#___,然后每行输出一个到另一个文本文件,比如, 输出.txt。

对于本例,输出将是:

http://asd.asd.asd#asd
https://asd.asd.asd#asd

再次抱歉,如果这是重复的,我只是不擅长使用 Google,在此先谢谢你 :)

使用 Python 3

【问题讨论】:

    标签: regex url python-3.x


    【解决方案1】:
    (?<=href=")[^"]*#[^"]*(?=")
    

    您可以简单地将这个正则表达式与re.findall 一起使用并获得结果。参见演示。

    https://regex101.com/r/uF4oY4/7

    如果# 是可选的使用

    (?<=href=")[^"]*(?=")
    

    你可以把它当作

    f=open("input.txt","r")

    print (re.findall(r'(?&lt;=href=")[^"]*#[^"]*(?=")',f.read()))

    【讨论】:

    • 您必须将 '#'-char 设为可选才能使其正常工作,因为 OP 已要求 '#something' 是可选的:(?
    • @vks 这似乎工作得很好。但是正如我所说,我不知道re,那么我该如何在代码中使用它呢?
    • 如何循环遍历所有内容? for x in re.findall(): 不工作。
    • 我想将所有结果输出到文件中,而不仅仅是打印。此外,我假设您的意思是 re.findall(r'(?&lt;=href=")[^"]*#[^"]*(?=")',f.read())... 当然,所有双括号都会导致问题。
    • 由于某种原因,这只是返回空字符串。
    【解决方案2】:

    使用BeautifulSoup

    from bs4 import BeautifulSoup
    s = '''asd<a href="http://asd.asd.asd#asd">asd</a>
    asd<a href="https://asd.asd.asd#asd">asd</a>'''
    soup = BeautifulSoup(s)
    print([i['href'] for i in soup.select('a') if '#' in i['href']])
    

    【讨论】:

    • No module named 'bs4'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2015-07-29
    相关资源
    最近更新 更多