如何在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
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
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的另一种替代方案: