在Python中使用正则表达式通过循环编译

在Python中使用正则表达式通过循环编译,python,regex,loops,Python,Regex,Loops,我有一个文本,我想通过给定集合中的单词进行匹配。 匹配后,它将简单地标记它们。 代码是这样的 mytext = "xxxxx repA1 yyyy REPA1 zzz." geneset = {'leuB', 'repA1'} # The actual length is ~1Million entries result = mytext for gene in geneset: regexp = re.compile(gene, flags=re.IGNORECASE) re

我有一个文本,我想通过给定集合中的单词进行匹配。 匹配后,它将简单地标记它们。 代码是这样的

mytext = "xxxxx repA1 yyyy REPA1 zzz."
geneset = {'leuB', 'repA1'} # The actual length is ~1Million entries

result = mytext
for gene in geneset:
    regexp = re.compile(gene, flags=re.IGNORECASE)
    result = re.sub(regexp, r'<GENE>\g<0></GENE>', mytext)

print result
mytext=“xxxxx repA1 yyy repA1 zzz。”
geneset={'leuB','repA1'}#实际长度约为100万个条目
结果=mytext
对于基因集中的基因:
regexp=re.compile(gene,flags=re.IGNORECASE)
result=re.sub(regexp,r'\g',mytext)
打印结果
预期产出为:

xxxxx <GENE>repA1</GENE> yyyy <GENE>REPA1</GENE> zzz.
xxxxx repA1 yyy repazzz。

但是为什么上面的代码无法生成结果呢?

在您的代码中,您在原始文本上使用了
re.sub
(每个循环中没有变化),如果您使用结果变量,如
result=re.sub(regexp,r'\g',result)
则输出将是正确的。

在您的代码中,您在原始文本上使用
re.sub
(每个循环中没有变化),如果您使用结果变量,如
result=re.sub(regexp,r'\g',result)
,输出将是正确的。

在您的代码中,您在原始文本上使用
re.sub
(每个循环中没有变化),如果使用结果变量,如
result=re.sub(regexp,r'\g',result)
,则输出将正确。

在代码中,如果使用结果变量,如
result=re.sub(regexp,r'\g',result),则在原始文本上使用
re.sub
(每个循环中没有变化)
输出将是正确的。

您应该将
re.sub
中的
mytext
更改为
result
。这样,您可以在每次循环
geneset
时更新变量
result
,而不是每次迭代都从原始(且未更新)字符串
mytext
开始

for gene in geneset:
    regexp = re.compile(r"(?i)({})".format(gene))
    result = re.sub(regexp, r'<GENE>\g<1></GENE>', result)
基因集中基因的
:
regexp=re.compile(r“(?i)({})”.format(gene))
result=re.sub(regexp,r'\g',result)

您应该将
re.sub
中的
mytext
更改为
result
。这样,您可以在每次循环
geneset
时更新变量
result
,而不是每次迭代都从原始(且未更新)字符串
mytext
开始

for gene in geneset:
    regexp = re.compile(r"(?i)({})".format(gene))
    result = re.sub(regexp, r'<GENE>\g<1></GENE>', result)
基因集中基因的
:
regexp=re.compile(r“(?i)({})”.format(gene))
result=re.sub(regexp,r'\g',result)

您应该将
re.sub
中的
mytext
更改为
result
。这样,您可以在每次循环
geneset
时更新变量
result
,而不是每次迭代都从原始(且未更新)字符串
mytext
开始

for gene in geneset:
    regexp = re.compile(r"(?i)({})".format(gene))
    result = re.sub(regexp, r'<GENE>\g<1></GENE>', result)
基因集中基因的
:
regexp=re.compile(r“(?i)({})”.format(gene))
result=re.sub(regexp,r'\g',result)

您应该将
re.sub
中的
mytext
更改为
result
。这样,您可以在每次循环
geneset
时更新变量
result
,而不是每次迭代都从原始(且未更新)字符串
mytext
开始

for gene in geneset:
    regexp = re.compile(r"(?i)({})".format(gene))
    result = re.sub(regexp, r'<GENE>\g<1></GENE>', result)
基因集中基因的
:
regexp=re.compile(r“(?i)({})”.format(gene))
result=re.sub(regexp,r'\g',result)
除了从集合更改为列表之外。除了从集合到列表的改变。除了从集合到列表的改变。除了从集合到列表的改变。