如何使用 RegEx 查找连续重复的字符串和 return Python 中的匹配列表

How to use RegEx to find a consecutively repeating string and return a list of matches in Python

我想知道是否可以 return 一个包含特定连续重复字符串的正则表达式模式的匹配列表,例如"ADDD"。这听起来可能微不足道,事实上根据 regexpal.com,它应该像这个“(AGATC)\1+”一样简单: result in regexpal.com。如文档中所述,使用 re.findall,应该 return 包含所有这些匹配项的列表。 但是,当使用此代码时:

pattern = r"(AGATC)\1+"
list_of_results = re.findall(pattern, seq_string)
print("list of results:", list_of_results)

其中 seq_string 是我正在寻找模式的字符串,与正则表达式图像中使用的字符串相同,我得到一个包含模式的 1 个元素的数组 ('AGATC').

是否可以满足我的需求?也许我忽略了什么?

试试这个:

import re

res = re.findall('AGATC', seq_string)
print(res)

你的问题是 re.findall 只会 return 如果正则表达式中存在一个(或多个)捕获组的内容。您可以通过使用外部组来捕获整个匹配项来解决此问题,例如:

pattern = r"((AGATC)+)"
list_of_results = re.findall(pattern, seq_string)
print("list of results:", list_of_results)

这会给你这样的结果:

[('AGATCAGATCAGATC', 'AGATC')]

您可以使用列表理解仅 return 每个结果的第一个值,例如

list_of_results = [g[0] for g in re.findall(pattern, seq_string)]

得到类似的东西:

['AGATCAGATCAGATC']

或者您可以使用 re.finditer 并根据它生成的匹配对象构建您的列表:

pattern = r"(AGATC)+"
list_of_results = [m.group() for m in re.finditer(pattern, seq_string)]
print("list of results:", list_of_results)

这会给你这样的结果:

['AGATCAGATCAGATC']