основываясь на ответе, предложенном DNS, я создал что-то более сложное, чтобы перехватить все случаи (или, по крайней мере, большинство из них), стараясь не добавлять слишком много ошибок:
def Irepl(matchobj):
# Catch acronyms
if matchobj.group(0).isupper():
return matchobj.group(0)
else:
# Replace Group2 with 'l's
return matchobj.group(1) + 'l'*len(matchobj.group(2)) + matchobj.group(3)
# Impossible to know if first letter is correct or not (possibly a name)
I_FOR_l_PATTERN = "([a-zA-HJ-Z]+?)(I+)(\w*)"
for line in lines:
tmp_line = line.replace("l'", "I'").replace("'I", "'l").replace(" l ", " I ")
tmp_line = re.sub("^l ", "I ", tmp_line)
cor_line = re.sub(I_FOR_l_PATTERN, Irepl, tmp_line)
# Loop to catch all errors in a word (iIIegaI for example)
while cor_line != tmp_line:
tmp_line = cor_line
cor_line = re.sub(I_FOR_l_PATTERN, Irepl, tmp_line)
Надеюсьэто помогает кому-то еще!