我已尝试调试此脚本,但我不确定是否导致错误。
list1 = ['<p>Text ([0-9]):(.*)</p>' ,'<p>Text2 ([0-9]):(.*)</p>','<p>Text ([0-9]):(.*)</p>']
list2 = ["<p class='text'>Text \1:\2</p>" ,"<p class='text'>Text \1:\2</p>","<p class='text'>TEXT ([0-9]):(.*)</p>"]
translation = dict(zip(list1, list2))
pattern = re.compile('(%s)' % '|'.join(dicts.list1))
file.close()
file = open(args.file,'r+')
def translate(match):
return dicts.translation[match.group(0)]
with open(args.file, 'r+') as output:
with open(args.file, 'r+') as book:
for line in book:
output.write(pattern.sub(translate, line))
错误:
return dicts.translation5[match.group(0)]
KeyError: '<p>Text 1:1-1</p>'
答案 0 :(得分:1)
问题是文字'<p>Text 1:1-1</p>'
不是你词典中的关键词。由于dicts
是代码中的自由变量,因此我们无法告诉您。
答案 1 :(得分:1)
我相信您正在尝试匹配读取行并查看它匹配的正则表达式,以便您可以对其应用适当的更改(也以正则表达式形式)。这种方法可能有效但在这种情况下使用字典是多余的。
广泛的方法是
pattern
匹配以查找匹配项。 list1
中的每个模式与匹配的字符串进行比较,看是否为蓝色
火柴。 list2
像
这样的东西list1 = ['<p>Text ([0-9]):(.*)</p>' ,'<p>Text2 ([0-9]):(.*)</p>','<p>Text3 ([0-9]):(.*)</p>']
list2 = ["<p class='text'>Text \1:\2</p>" ,"<p class='text'>Text \1:\2</p>","<p class='text'>TEXT ([0-9]):(.*)</p>"]
translation = dict(zip(list1, list2))
pattern = re.compile('(%s)' % '|'.join(dicts.list1))
def translate(m):
for x,v in translation.items():
if re.search(x,m.group()):
return re.sub(x,v,m.group())
for line in book:
m = pattern.findall(line)
ret = translate(m)
if ret is not None:
output.write(ret)
else:
#No match. Echo back original line
output.write(line)
输入
<p>Text 1:1-1</p>
输出
<p class='text'>Text 1:1-1</p>
可能还有其他更好的方法
答案 2 :(得分:0)
尝试使用match.group(1)。在正则表达式结果中,group(0)是整个匹配的字符串,组1和以下是正则表达式本身的组。在您的案例组中(0)== "<p>Text 1:1-1\</p\>"
和组(1)== "1"
。