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

How to limt the digit size into single in python regex

我有一个如下所示的文本文件:

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

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

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 时也会被替换。所以我想通过只替换一个数字而不是超过一个数字来限制这一点。

我希望我的问题是可以理解的。

我只想把1替换成空

不是 1 属于 11,21,31,41 等等等等

提前致谢

您可以使用

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

IDEONE demo

正则表达式 - ,?\b[0-5]x[a-zA-Z]\b - 具有 word boundary \b 以便 digit + x + 字母前后必须有非单词字符(不是[a-zA-Z0-9_])并且逗号在开头是可选的(因为?匹配1或0出现前面的子模式)。

此外,请注意正则表达式最好使用 "raw" 字符串文字声明(参见 r"" 表示法)。这样,我们在使用单词边界时就不必使用双反斜杠了。

另一种使用函数的方法-

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