我有一个字符串:名称质量从到二硫键 -2.02 97 144 二硫键 -2.02 111 158 二硫键 -2.02 121 174 二硫键 -2.02 125 176 二硫键 -2.02 85 174 二硫键 -2.02 10 176
我想提取元组 (97,144)、(111,158)、(121,174)、(125,176)、(85,174)、(10,176)(即每种情况下 -2.02 之后的数字对)。
我只想匹配与重复模式的确切数量相匹配的字符串(即,“二硫键 -2.02 X X”的相同单词模式恰好重复 6 次)。文件中将有其他字符串具有完全相同的模式,但重复次数多于或少于 6 次(例如,文件中的另一个字符串可能是 'Name Mass From To Disulphide bond -2.02 97 144 Disulphide bond -2.02 111 158 二硫键 -2.02 121 174',我不想匹配这个)。
我最初是这样写一个正则表达式的:
six_regex = re.search(r'Name Mass From To Disulphide bond -2.02 ([\d]+) ([\d]+) Disulphide bond -2.02 ([\d]+) ([\d]+) Disulphide bond -2.02 ([\d]+) ([\d]+) Disulphide bond -2.02 ([\d]+) ([\d]+) Disulphide bond -2.02 ([\d]+) ([\d]+) Disulphide bond -2.02 ([\d]+) ([\d]+)',mod_line)
我想知道是否有一种方法可以像这样编写正则表达式:
ix_regex = re.search(r' Disulphide bond -2.02 ([\d]+) ([\d]+) ',mod_line)
我在其中添加“仅当上述短语匹配 6 次时才匹配”。
我使用 regex101.com 来处理类似 Disulphide bond -2.02 ([\d]+) ([\d\s]+){6} 的内容,因为我在 stackoverflow 上的其他地方阅读过将数字放在括号中可能是一个解决方案;但我似乎没有匹配到。
有人可以建议一个更整洁的正则表达式,我需要匹配一个重复模式 n 次才能匹配。
请您参考如下方法:
您可以在 python 中使用此代码:
>>> import re
>>> s = 'Name Mass From To Disulphide bond -2.02 97 144 Disulphide bond -2.02 111 158 Disulphide bond -2.02 121 174 Disulphide bond -2.02 125 176 Disulphide bond -2.02 85 174 Disulphide bond -2.02 10 176'
>>> arr = re.findall(r'(?<=Disulphide bond -2.02 )(\d+) (\d+)', s)
>>> if len(arr) == 6:
... print arr
...
[('97', '144'), ('111', '158'), ('121', '174'), ('125', '176'), ('85', '174'), ('10', '176')]
**正则表达式详细信息:&&
-
(?<=Disulphide bond -2.02 ): 后视表达式断言我们在当前位置的左侧给出了字符串 -
(\d+) (\d+): 在 2 个不同的捕获组中匹配由 2 个空格分隔的 2 个数字
