如何使用 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']
我想知道是否可以 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']