用Windows文件路径替换超链接中的href值?

时间:2017-01-17 23:11:46

标签: python regex python-3.x

我试图在Python中使用sub方法和正则表达式来搜索<xref href="8832">的所有实例并替换为Windows文件路径:<xref href="3.1 First Level\3.1.1 Second Level\3.1.1.2 Third Level.dita">但是它在第二个时间内仍然失败到最后一行(regex_replace = ...)。这是我的代码:

matches = re.search(r'<xref(\s*)href="(\d+)">', html)
if matches:
    topicid = matches.group(2)
    windowsfilepath = '3.1 First Level\3.1.1 Second Level\3.1.1.2 Third Level.txt'
    regex_search = r'<xref(\s*)href="' + re.escape(topicid) + r'">'
    regex_replace = r'<xref href="'+ re.escape(windowsfilepath) + r'">'
    html = re.sub(regex_search,regex_replace,html)

我非常确定它与转义windowsfilepath中的反斜杠和/或句号有关,但我尝试过使用re.escape()并且文本永远不会被替换。< / p>

1 个答案:

答案 0 :(得分:0)

如果您将windowsfilepath放在额外的双引号中,您应该可以简单地将所有匹配替换为re.sub(),如下所示:

windowsfilepath = '"3.1 First Level\3.1.1 Second Level\3.1.1.2 Third Level.txt"'
new_html = re.sub(r'(?<=\<xref href\=)("\d+")', windowsfilepath, html)

编辑:

显然,\3会转换为End-of-Text个字符。如果您尝试逃避(\),请\\3re.sub()视为backreference(在这种情况下,不存在且代码失败) )。 Here他们建议在.replace('\\', '\\\\')中的替换字符串中添加re.sub()方法,然后您最终会得到\\而不是TEX

我建议尝试斜杠/而不是反斜杠\,这应该适用于Windows see here

以下是修改后的代码:

windowsfilepath = '"3.1 First Level/3.1.1 Second Level/3.1.1.2 Third Level.txt"'
new_html = re.sub(r'(?<=\<xref href\=)("\d+")', windowsfilepath, html)