我试图在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>
答案 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个字符。如果您尝试逃避(\
),请\\3
将re.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)