gpt4 book ai didi

python - 匹配包含点的字符串

转载 作者:行者123 更新时间:2023-12-01 04:03:56 25 4
gpt4 key购买 nike

我正在尝试在文本文件中查找一些单词并替换它们。我已将要替换的单词存储在变量中。例如:

COR00g1.1   SolycCB00g000010

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

输入:

ch00    assembler   exon    1146259 1146582 .   -   .   ID=exon2;Parent=COR00g1.1.2,COR00g1.1.3

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

输出:

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])

最佳答案

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

您正在寻找定义的子字符串而不是模式,因此首先不要使用正则表达式。

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

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

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

search = 'COR00g1\.1'
<小时/>

编辑:解决此评论:

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 ,你造成了一个额外的问题,却没有任何好处。

关于python - 匹配包含点的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35989441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com