1

我面临的问题是链接名称错误......不同文件中有数百个错误链接。

所以我写 bash 来替换
<a href="../../../external.html?link=http://www.twitter.com">
<a href="../../external.html?link=http://www.facebook.com/pages/somepage/">
<a href="../external.html?link=http://www.tumblr.com/">
直接链接的链接,比如 <a href="http://www.twitter.com>

我知道我们有模式 ../ 重复一次或多次。还有 external.html?link 也应该被删除。

如何建议这样做?awk,sed,也许是 python?我需要正则表达式吗?

谢谢意见...

4

2 回答 2

1

可能是正则表达式是正确解决方案的地方。您只是在属性中搜索文本,并且内容是规则的,符合模式。

以下 python 正则表达式将为您找到这些链接:

r'href="((?:\.\./)+external\.html\?link=)([^"]+)"'

我们寻找的模式是一段href=""文本中的某物,其中“某物”以一个或多个 的实例开始../,然后是external.html?link=,然后是任何不包含"引号的文本。

等号后面的匹配文本被分组到第 2 组,以便于检索,第 1 组保存../../external.html?link=部分。

如果您只想../../external.html?link=完全删除该部分(因此链接直接指向端点而不是通过重定向页面),请离开第一组并.sub()在您的 HTML 文件上做一个简单的操作:

import re
redirects = re.compile(r'href="(?:\.\./)+external\.html\?link=([^"]+)"')

# ...
redirects.sub(r'href="\1"', somehtmlstring)

请注意,这也可以匹配任何正文文本(因此在 HTML 标记之外),这不是 HTML 感知解决方案。不过,很可能没有这样的正文。但如果有,您将需要一个成熟的 HTML 解析器,例如 BeautifulSoup 或 lxml。

于 2012-08-25T10:54:02.427 回答
0

使用 HTML 解析器,如 BeautifulSoup 或 lxml.html。

于 2012-08-25T10:47:10.960 回答