错误的命名链接搜索和替换

时间:2012-08-25 10:39:37

标签: python regex bash sed awk

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

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

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

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

感谢您的意见......

2 个答案:

答案 0 :(得分:1)

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

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

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

我们寻找的模式是href=""块文本中的内容,其中'某些'以../的一个或多个实例开头,后跟external.html?link=,然后是任何不包含"引用的文本。

等号后的匹配文本在第2组中分组以便于检索,第1组包含../../external.html?link=部分。

如果您要做的只是完全删除../../external.html?link=部分(因此链接直接指向端点而不是通过重定向页面),请不要使用第一个组并执行简单的{{1}你的HTML文件:

.sub()

请注意,这也可以匹配任何正文(因此HTML标记外),这不是支持HTML的解决方案。有可能没有这样的正文。但如果有,你需要一个完整的HTML解析器,如BeautifulSoup或lxml。

答案 1 :(得分:0)

使用像BeautifulSoup或lxml.html这样的HTML解析器。