我有一个字符串: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
我想找出元组(97144),(111158),(121174),(125176),(85174),(10176)(即每种情况下-2.02后面的数字对)。在
我只想匹配匹配这个重复模式的确切数量的字符串(即,相同的单词模式“二硫键-2.02 X X”重复了6次)。文件中会有其他具有完全相同模式的字符串,但重复次数多于或少于6次(例如,文件中的另一个字符串可能是'Name Mass From To Disulphide bond -2.02 97 144 Disulphide bond -2.02 111 158 Disulphide bond -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)
我想知道是否有一种方法可以只编写一个正则表达式:
^{pr2}$在这里我加上“只有当上面的短语匹配6次时才匹配”。在
我使用regex101.com来处理Disulphide bond -2.02 ([\d]+) ([\d\s]+){6}
之类的东西,因为我在stackoverflow上的其他地方读到,将数字放在括号中可能是一个解决方案;但是我似乎没有找到匹配项。在
有人能建议一个更整洁的正则表达式,我需要匹配一个重复的模式n次才能匹配。在
如果我理解正确,你可以使用
首先,匹配所有重复六次的实例,然后从每个实例中提取对
您可以在python中使用以下代码:
Code Demo
**正则表达式详细信息:
(?<=Disulphide bond -2.02 )
:Lookbehind表达式来断言我们已经在当前位置的左边给出了字符串(\d+) (\d+)
:匹配2个不同捕获组中由2个空格分隔的2个数字你对
{6}
量词的想法是正确的。在你的问题是分组(
(?:)
-非选择组)没有正确的模式。在Name Mass From To (?:Disulphide bond -2\.02 ([\d]+) ([\d]+)\s*){6}
应该能做到。在解释
Name Mass From To
-字符串的开头。在(?:
-打开非选择组。在Disulphide bond -2\.02 ([\d]+) ([\d]+)\s*
-要重复的模式)
-关闭非选择组。在{6}
-重复非选择组六次。在相关问题 更多 >
编程相关推荐