gpt4 book ai didi

Python 正则表达式 : match only if pattern is repeated n number of times

转载 作者:太空宇宙 更新时间:2023-11-04 07:50:21 25 4
gpt4 key购买 nike

我有一个字符串:名称质量从到二硫键 -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')]

Code Demo

**正则表达式详细信息:&&

  • (?<=Disulphide bond -2.02 ) : 后视表达式断言我们在当前位置的左侧给出了字符串
  • (\d+) (\d+) : 在 2 个不同的捕获组中匹配由 2 个空格分隔的 2 个数字

关于Python 正则表达式 : match only if pattern is repeated n number of times,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55687552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com