Use re.finditer
>>> [m.group() for m in re.finditer(r'((\w)\2)+', 'zoo')] ['oo'] >>> [m.group() for m in re.finditer(r'((\w)\2)+', 'arrange')] ['rr'] >>> [m.group() for m in re.finditer(r'((\w)\2)+', 'committee')] ['mm', 'ttee'] >>> [m.group() for m in re.finditer(r'((\w)\2)+', 'bookkeeper')] ['ookkee']
Check if the string contains a sequential pair:
>>> bool(re.search(r'((\w)\2){2}', 'zoo')) False >>> bool(re.search(r'((\w)\2){2}', 'arrange')) False >>> bool(re.search(r'((\w)\2){2}', 'committee')) True >>> bool(re.search(r'((\w)\2){2}', 'bookkeeper')) True
You can also use the following version of non-capture ( ?: :
(?:(\w)\1){2}
source share