使用sub()方法将html代码中的内容替换为相应的翻译时出现Python正则表达式问题
各位。我是一名翻译,自学了一些Python。我遇到了一些我无法解决的编码问题 我所拥有的: 电子表格中两列的源语句及其各自的翻译 包含句子和html标记的html代码 我想做的是:使用Python正则表达式方法-sub查找英语句子并将其替换为各自的翻译句子 例如:html代码中的三个句子- 美洲狮是大型动物。 它们在美国被发现。 他们不吃草 我有html代码中每个句子的翻译。我想一次替换一个句子,同时保留html标记。通常我可以使用如下子方法:使用sub()方法将html代码中的内容替换为相应的翻译时出现Python正则表达式问题,python,regex,Python,Regex,各位。我是一名翻译,自学了一些Python。我遇到了一些我无法解决的编码问题 我所拥有的: 电子表格中两列的源语句及其各自的翻译 包含句子和html标记的html代码 我想做的是:使用Python正则表达式方法-sub查找英语句子并将其替换为各自的翻译句子 例如:html代码中的三个句子- 美洲狮是大型动物。 它们在美国被发现。 他们不吃草 我有html代码中每个句子的翻译。我想一次替换一个句子,同时保留html标记。通常我可以使用如下子方法: regex1 = re.compile(r'(\&
regex1 = re.compile(r'(\>.*)SOURCE_SENTENCE_HERE ?(.*\<)')
resultCode = regex1.sub(r'\1TRANSLATION_SENTENCE_HERE\2', originalHtmlCode)
为此,我编写了一个python脚本。我将html代码保存在txt文件中,并在Python代码中访问它。然后我创建了一个字典,将源目标对存储在上面提到的电子表格中。最后,我使用rexgex sub方法查找并替换html代码中失败的句子。由于某种原因,最后一部分根本不起作用。链接到我的Python代码-或以下链接:
import re, openpyxl, pyperclip
buynavFile = open('C:\\Users\\zs\\Documents\\PythonScripts\\buynavCode.txt')
buynavCode = buynavFile.read()
buynavFile.close()
wb = openpyxl.load_workbook('buynavSegments.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')
segDict = {}
maxRow = sheet.max_row
for i in range(2, maxRow + 1):
segDict[sheet.cell(row=i, column=3).value] = sheet.cell(row=i, column=4).value
for k, v in segDict.items():
k = '(\\>.*)' + str(k) + ' ?(.*\\<)'
v = '\\1' + str(v) + '\\2'
buynavRegex = re.compile(k)
buynavResult = buynavRegex.sub(v, buynavCode)
pyperclip.copy(buynavResult)
print('Result copied to clipboard')
错误消息如下:
回溯最近一次呼叫上次:
文件C:\Users\zs\Documents\PythonScripts\buynav.py,第20行,在
buynavResult=buynavRegex.subv,buynavCode
文件C:\Users\zs\AppData\Local\Programs\Python\Python36\lib\re.py,
第326行,in_subx
模板=\u编译\u复制模板,模式
文件C:\Users\zs\AppData\Local\Programs\Python\Python36\lib\re.py,
第317行,in_compile_repl
返回sre_parse.parse_templaterepl,pattern
文件
C:\Users\zs\AppData\Local\Programs\Python\Python36\lib\sre\u parse.py,
第943行,在parse_模板中
addgroupintthis[1:],lenthis-1
文件
C:\Users\zs\AppData\Local\Programs\Python\Python36\lib\sre\u parse.py,
第887行,在addgroup中
raise s.ERROR无效的组参考%d%索引,位置
sre_constants.error:位置1处的组引用11无效
有人能告诉我这件事吗?我非常感谢。考虑是否要使用替换文本,其中必须放置组1的内容并将其连接到字符串2。您可以编写r'\12',但这不起作用,因为正则表达式解析器会认为您引用的是组12,而不是后面跟字符串2的组1 您可以使用\g语法来引用组:r'\g2'来解决此问题:
在您的情况下,替换字符串包含动态内容,如strv,它可以是任何内容。如果它恰好以一个数字开头,则在前面描述的情况下,您将使用\g来避免此问题。请注意,在每个循环中,buynavResult将被覆盖,而不是附加到。另外,我会考虑用LXML之类的方法来遍历DOM,而不是使用正则表达式。非常感谢!
>>> re.sub(r'(he)llo', r'\12', 'hello')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.6/re.py", line 191, in sub
return _compile(pattern, flags).sub(repl, string, count)
File "/usr/lib/python3.6/re.py", line 326, in _subx
template = _compile_repl(template, pattern)
File "/usr/lib/python3.6/re.py", line 317, in _compile_repl
return sre_parse.parse_template(repl, pattern)
File "/usr/lib/python3.6/sre_parse.py", line 943, in parse_template
addgroup(int(this[1:]), len(this) - 1)
File "/usr/lib/python3.6/sre_parse.py", line 887, in addgroup
raise s.error("invalid group reference %d" % index, pos)
sre_constants.error: invalid group reference 12 at position 1
>>> re.sub(r'(he)llo', r'\g<1>2', 'hello')
'he2'