正如我从您的问题中得到的那样,您想在 HTML 代码中插入一些您知道明文索引的字母后面的内容。如果是这种情况,我认为最简单的解决方案是忽略所有 html 标签,只计算它们之外的字母。你可以这样做:
def insertInHtml(string, insstr, position):
ctr=0
insidetag=False
for ci in range(len(string)):
if string[ci]=='<':
insidetag=True
elif string[ci]=='>':
insidetag=False
else:
if not insidetag: ctr+=1
if ctr==position+1:
HTMLIndex=ci
break
return string[0:HTMLIndex] + insstr + string[HTMLIndex:]
该函数计算作为“字符串”参数传递给函数的 HTML 字符串中不在 HTML 标记内的字符数。当您点击作为“位置”参数传递给函数的数字时,计数循环将中断,函数将在您指定的位置拆分字母后面的字符串。然后它将在这些部分之间插入 insstr 字符串并返回新字符串。如果提供的索引大于文本的长度,它将引发错误。
编辑:正如 JF Sebastian 所指出的,如果 html 有注释(以 <、感叹号和两个破折号开头的行)或属性中的文字 <,这将失败。这是处理这两种情况的函数:
def insertInHtml(string, insstr, position):
ctr=0
insidetag=False
insideattr=False
for ci in range(len(string)):
suchar=''
if not ci==len(string)-1: suchar=string[ci+1]
if string[ci]=='<' and not insideattr:
insidetag=True
elif (string[ci]=='>' and not insideattr) or (string[ci]=='-' and string[ci-2:ci]=='!-'):
insidetag=False
elif insidetag and string[ci]+suchar=='="':
insideattr=True
elif insideattr and string[ci]=='"':
insideattr=False
else:
if not insidetag: ctr+=1
if ctr==position+1:
HTMLIndex=ci
break
return string[0:HTMLIndex] + insstr + string[HTMLIndex:]
不是很干净的代码,但应该足够容易理解。