匹配包含d的字符串

2024-05-14 17:49:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在文本文件中找到一些单词并替换它们。 我把要替换的单词存储在变量中。例如:

COR00g1.1   SolycCB00g000010

因此,在文本中,我需要找到“COR00g1.1”单词并替换为“SolycCB00g000010”。问题是“COR00g1.1”实际上是在匹配另一个单词。 示例:

输入:

^{pr2}$

输出:

ch00 assembler  exon    1146259 1146582 .   -   .   ID=exon2;Parent=SolycCB00g000010.2,SolycCB00g000010.3

ch00 assembler  transcript  4197578 4197801 .   +   . Parent=SolycCB00g000010.1;ID=SolycCB00g000010.1.1;official=no

可以看到,第二行也被替换为新的ID,而它不应该被替换

这是我使用的代码:

with open(fname, "r") as dataf:
    reader = csv.reader(dataf, delimiter="\t")
    for line in reader:
        line[8] = re.sub(search, replace, line[8])

Tags: 文本id示例line单词readerparentassembler
1条回答
网友
1楼 · 发布于 2024-05-14 17:49:47

I know the problem, but I do not know how to avoid it

您需要的是一个已定义的子字符串,而不是模式,所以首先不要使用正则表达式。在

简单的子字符串替换如下所示:

line[8] = line[8].replace('COR00g1.1', 'SolycCB00g000010')

如果必须使用正则表达式,则需要转义.,以便将其视为文字字符:例如

^{pr2}$

编辑:要处理此评论:

I have a list of words to be replaced, and I'm calling a function to replace them two by two

并不意味着你需要使用正则表达式,它只是意味着你需要使用变量。例如:

def searchAndReplace(search, replace):
    # your code here
    line[8] = line[8].replace(search, replace)

在需要正则表达式的地方传递一个文本字符串,然后咀嚼该字符串以希望能够转义所有特殊的正则表达式字符,这是所有世界中最糟糕的。在

如果只需要简单的子字符串匹配,那么使用正则表达式没有任何好处,而且增加了显著的复杂性。套用众所周知的Jamie Zawinski quote,您创建了一个没有任何好处的额外问题。在

相关问题 更多 >

    热门问题