我在Python中编写了一个自定义HTML页面的脚本,该页面在字符串/行中找到一个单词,并使用以下标记突出显示该单词,其中instance是要搜索的单词。
<b><font color=\"red\">"+instance+"</font></b>
我需要找一个单词(不区分大小写)让我们说&#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); }
};
(不区分大小写),那么我将不胜感激。
答案 0 :(得分:0)
也许我误解了你的问题,但不会是最好的选择吗?
答案 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