繁体   English   中英

For 循环只更改最后一个值 - Python

[英]For loop only changing the last value- Python

我正在运行 for 循环,但它只修改最后一个条目的值而不是所有值。

import re
ht = """
    <tr>
        <td>03-31-2020_00.20.02.1135</td>
    </tr>
        <tr>
        <td>03-31-2020_00.20.02.105</td>
    </tr>
    <tr>
        <td>03-28-2020_05.10.01.7068</td>
    </tr>"""

for i in ht.split():
        if i.startswith("<td>03-31-2020"):
            htm = (ht.replace(i,'<b><font color="#ff0000">'+i+'</font></b>'))
print (htm)

-- 得到如下输出(只是修改了最后一个条目而不是所有匹配的整数)-

</tr>
<tr>
    <td>03-31-2020_00.20.02.1135</td>
</tr>
    <tr>
    <b><font color="#ff0000"><td>03-31-2020_00.20.02.105</td></font></b>
</tr>
<tr>
    <td>03-28-2020_05.10.01.7068</td>
</tr>

您可以使用re库中的re.sub方法将匹配模式替换为替换模式。

尝试这个:

html = re.sub(r"(<td>03-31-2020.*?</td>)", r'<b><font color="#ff0000">\1</font></b>', ht)
print(html)

输出:

  <tr>
        <b><font color="#ff0000"><td>03-31-2020_00.20.02.1135</td></font></b>
    </tr>
        <tr>
        <b><font color="#ff0000"><td>03-31-2020_00.20.02.105</td></font></b>
    </tr>
    <tr>
        <td>03-28-2020_05.10.01.7068</td>
    </tr>

您遇到的问题主要是因为每次替换时,都会覆盖htm变量。

尝试改写您的ht变量:

for i in ht.split('\n'): 
    if i.strip().startswith("<td>03-31-2020"):
    ht = ht.replace(i,'<b><font color="#ff0000">'+i+'</font></b>') 
print (ht)

在每个循环中,您都将变量htm替换为一个新的替换子字符串,因此您只能看到最后一次匹配的结果。 您应该做的是将替换的值保存在 for 循环之外的变量中,这样您就不会丢失结果

import re
ht = """
    <tr>
        <td>03-31-2020_00.20.02.1135</td>
    </tr>
        <tr>
        <td>03-31-2020_00.20.02.105</td>
    </tr>
    <tr>
        <td>03-28-2020_05.10.01.7068</td>
    </tr>"""

htm = ""
for i in ht.split():
    if i.startswith("<td>03-31-2020"):
        htm += '<b><font color="#ff0000">'+i+'</font></b>' + "\n"
    else:
        htm += i + "\n"
print("htm", htm)

虽然,我建议使用正则表达式来匹配和替换字符串,更简洁的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM