Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python正则表达式中将数字大小限制为单个_Python_Regex_String_Substitution_Digit - Fatal编程技术网

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

如何在python正则表达式中将数字大小限制为单个,python,regex,string,substitution,digit,Python,Regex,String,Substitution,Digit,我有一个如下所示的文本文件: INPUT.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 在这里,我的目标是:保持第三列中大于>=6的数字: 所以,我所做的是: 我试

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

  • INPUT.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
    
在这里,我的目标是:保持第三列中大于>=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时,也会被更换。因此,我想通过只替换一个数字来限制这一点,而不是替换超过一个数字的数字

  • 预期产出

     155    Phe      12xD,7xQ
     151    Glu      11xD,6xA
     159    Thr      15xf,6xL,6xM
    
我希望我的问题可以理解

我只想将1替换为零

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

提前感谢您

您可以使用

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

正则表达式-
,?\b[0-5]x[a-zA-Z]\b
-具有一个
\b
,因此数字+x+字母的前后必须是非单词字符(而不是
[a-zA-Z0-9\/code>),并且逗号在开头是可选的(因为
匹配前面子模式的1或0次出现)

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

您可以使用

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

正则表达式-
,?\b[0-5]x[a-zA-Z]\b
-具有一个
\b
,因此数字+x+字母的前后必须是非单词字符(而不是
[a-zA-Z0-9\/code>),并且逗号在开头是可选的(因为
匹配前面子模式的1或0次出现)


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

使用函数的另一种方法-

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

印刷品-

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

使用函数的另一种方法-

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

印刷品-

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

我想
re.sub(r“\b[0-5]x[a-zA-Z]\b”,“I.rstrip())
应该会有所帮助。看见这是你要找的吗?使用单词边界请检查。它更好吗?我想
re.sub(r“\b[0-5]x[a-zA-Z]\b”,“I.rstrip())
应该会有帮助。看见这是你要找的吗?使用单词边界请检查。好点了吗?很乐意帮忙。另一个替代regex101的可视化方法是:很乐意提供帮助。具有可视化功能的regex101的另一种替代方案: