Python - 根据正则表达式匹配将html标记注入字符串

时间:2016-08-31 01:24:19

标签: python html regex string tags

我在Python中编写了一个自定义HTML页面的脚本,该页面在字符串/行中找到一个单词,并使用以下标记突出显示该单词,其中instance是要搜索的单词。

<b><font color=\"red\">"+instance+"</font></b>

具有以下结果: enter image description here

我需要找一个单词(不区分大小写)让我们说&#34; port&#34;在一个字符串内,可以是端口,端口,支持,支持,支持等,这很容易。

pattern = re.compile(word, re.IGNORECASE)
find_all_instances = pattern.findall(string_to_search)

但是我的字符串通常在一行中包含2个或更多实例,我需要追加 <b><font color=\"red\">"+instance+"</font></b>对每个实例for instance in find_all_instances: second_pattern = re.compile(instance) string_to_search = second_pattern.sub("<b><font color=\"red\">"+instance+"</font></b>", string_to_search) ,而不更改案例。

我的方法出现问题,是我试图在findall(完全匹配)找到的每个实例上进行迭代, 同时在字符串中也可以找到多个相同的匹配。

<b><font color="red"><b><font color="red"><b><font color="red">Http</font></b></font></b></font></b></font>

结果如下:

<b><font color="red">Http</font></b>

当我需要时

<b><font color="red">instance</font></b>

我在想,如果我能够找到pattern.sub在执行此操作时替换的字符串的确切部分,我将能够避免这种情况, 但是我无法找到任何这种用法的例子,这让我相信我做错了。

如果有人有办法插入instance而不替换所有匹配的struct s { std::unique_ptr<A> instance; std::unique_ptr<A> get() { return std::move(instance); } }; (不区分大小写),那么我将不胜感激。

2 个答案:

答案 0 :(得分:0)

也许我误解了你的问题,但不会是最好的选择吗?

示例:https://repl.it/DExs

答案 1 :(得分:0)

好的,我快速做了两种方式!第二个循环绝对是要走的路。它使用re.sub(正如其他人评论的那样)。它取代了小写搜索术语熊。

import re

FILE = open("testing.txt","r")
word="port"

#THIS LOOP IS CASE SENSITIVE
for line in FILE:
    newline=line.replace(word,"<b><font color=\"red\">"+word+"</font></b>")
    print newline

#THIS LOOP IS INCASESENSITIVE
for line in FILE:
    pattern=re.compile(word,re.IGNORECASE)
    newline = pattern.sub("<b><font color=\"red\">"+word+"</font></b>",line)
    print newline