在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)
除了从集合更改为列表之外。除了从集合到列表的改变。除了从集合到列表的改变。除了从集合到列表的改变。