如何在python正则表达式中将数字大小限制为单个

2024-09-30 14:27:16 发布

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

我有一个文本文件如下:

  • 你知道吗输入.txt你知道吗

    155    Phe  12xD,7xQ,5xE,5xG,4xA,4xS,2xF,2xH,2xI,2xK,1xM,1xN
    151    Glu  11xD,6xA,5xE,3xF,3xG,3xM,2xI,2xS,1xH,1xK,1xL,1xP
    159    Thr  15xF,6xL,6xM,5xG,5xI,5xT,4xA,4xV,3xR,1xD,1xN,1xP
    

在这里,我的目标是:在第3列中保持大于等于6的数字:

所以,我所做的是: 我试图通过以下脚本将1x(Anyleter)、2x(Anyleter)、3x(Anyleter)、4x(Anyleter)、5x(Anyleter)替换为nothing:

filepointer = open(filename,"r") # Reading file
text = filepointer.read()
merged = text.splitlines()
    for i in merged:
        print re.sub("[0-5]x[a-zA-Z]","", i.rstrip())#Replace 1x,2x,3x,4x,5x by nothing

输出:

155    Phe      2,7xQ # 2xD belong to 12xD replaced
151    Glu      1,6xA # 1xD belong to 11xD replaced
159    Thr      5,6xL,6xM # 5xF belong to 15xF replaced

更换1x、2x、3x、4x、5x是完美的,但当这些1x、2x、3x、4x、5x属于11x、12x、13x、14x、15x时也会被更换。所以我想限制这一点,只替换一个数字,而不是一个以上的数字。你知道吗

  • 预期产量

     155    Phe      12xD,7xQ
     151    Glu      11xD,6xA
     159    Thr      15xf,6xL,6xM
    

我希望我的问题可以理解。你知道吗

我只想将1替换为零

不是属于11、21、31、41等的1

先谢谢你


Tags: totexttxt目标数字merged文本文件nothing
2条回答

另一种方法是使用函数-

reg.txt内容如下-

155    Phe  12xD,7xQ,5xE,5xG,4xA,4xS,2xF,2xH,2xI,2xK,1xM,1xN
151    Glu  11xD,6xA,5xE,3xF,3xG,3xM,2xI,2xS,1xH,1xK,1xL,1xP
159    Thr  15xF,6xL,6xM,5xG,5xI,5xT,4xA,4xV,3xR,1xD,1xN,1xP

p = r"C:\reg.txt"

f = open(p,'rb').readlines()
def changer(l):
    d= l.split(',')
    dd = d[1:]
    lst = ['6', '7', '8', '9']
    s = [i for i in dd if i[0]  in lst]
    s.insert(0,d[0])
    return ','.join(s)
for i in f:
    print changer(i)

印刷品-

155    Phe  12xD,7xQ
151    Glu  11xD,6xA
159    Thr  15xF,6xL,6xM

你可以用

re.sub(r",?\b[0-5]x[a-zA-Z]\b","", s)

IDEONE demo

regex-,?\b[0-5]x[a-zA-Z]\b具有word boundary\b的特性,因此数字+x+字母的前后必须是非单词字符(不是[a-zA-Z0-9_]),并且逗号在开头是可选的(因为?匹配前面子模式的1或0次出现)。你知道吗

另外,请注意,正则表达式最好使用“原始”字符串文字来声明(请参见r""表示法)。这样,在使用单词边界时就不必使用双反斜杠。你知道吗

相关问题 更多 >