我是Python的新手.我正在学习正则表达式,但我需要帮助.
这里是HTML源代码:
<a href="http://www.ptop.se" target="_blank">http://www.ptop.se</a>
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个只打印出来的工具http://ptop.se.你能帮我吗?
Dav*_*vid 69
如果你只是在寻找一个:
import re
match = re.search(r'href=[\'"]?([^\'" >]+)', s)
if match:
print match.group(0)
Run Code Online (Sandbox Code Playgroud)
如果你有一个长字符串,并希望其中的每个模式实例:
import re
urls = re.findall(r'href=[\'"]?([^\'" >]+)', s)
print ', '.join(urls)
Run Code Online (Sandbox Code Playgroud)
s您要查找的字符串在哪里匹配.
快速解释regexp位:
r'...'是一个"原始"字符串.它会阻止你像往常一样担心逃避字符.(\特别是 - 在原始字符串中a\只是一个\.在常规字符串中,\\每次都必须这样做,并且在regexp 中会变老.)"
href=[\'"]?"表示匹配"href =",可能后跟一个'或"."可能"因为很难说你正在看的HTML有多可怕,并且引用并不是严格要求的.将"
()"中的下一位括起来使其成为"组",这意味着将其拆分并单独返回给我们.这只是一种说法"这是我感兴趣的模式的一部分.""
[^\'" >]+"说来匹配任何字符都没有',",>,或空间.本质上,这是一个URL结尾的字符列表.它让我们避免尝试编写可靠匹配完整URL的正则表达式,这可能有点复杂.
使用BeautifulSoup的另一个答案中的建议并不差,但确实引入了更高级别的外部要求.另外,它对你学习regexp的既定目标没有帮助,我认为这个特定的html解析项目只是其中的一部分.
这很容易做到:
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html_to_parse)
for tag in soup.findAll('a', href=True):
print tag['href']
Run Code Online (Sandbox Code Playgroud)
无论如何,一旦你安装了BeautifulSoup.
Jos*_*sad 14
不要使用正则表达式,使用BeautifulSoup.那个,或者是如此苛刻,以至于产生它,比如w3m/lynx并且回到w3m/lynx渲染的东西.首先是可能更优雅,第二次只是在一段时间内写的一些未经优化的代码上运行得更快.
小智 12
这应该工作,虽然可能有更优雅的方式.
import re
url='<a href="http://www.ptop.se" target="_blank">http://www.ptop.se</a>'
r = re.compile('(?<=href=").*?(?=")')
r.findall(url)
Run Code Online (Sandbox Code Playgroud)
Pau*_*ite 11
John Gruber(编写Markdown,由正则表达式组成并在Stack Overflow上使用)开始生成一个识别文本URL的正则表达式:
http://daringfireball.net/2009/11/liberal_regex_for_matching_urls
如果您只想获取URL(即您并未真正尝试解析HTML),这可能比HTML解析器更轻量级.
| 归档时间: |
|
| 查看次数: |
113404 次 |
| 最近记录: |