Для одной возможности см. Ответ Евпок. Вторая интерпретация вашего вопроса может заключаться в том, что вы хотите сопоставить все шаблоны одновременно с одной и той же позиции. В этом случае вы можете использовать выражение предпросмотра. Например. регулярное выражение
(?=(A))(?=(AB))
даст желаемый результат (т. Е. Все места, где оба шаблона совпадают с группами).
Обновление: С дополнительными пояснениями это можно сделать с помощью одного регулярного выражения. Вы просто должны сделать обе группы выше необязательными, т.е.
(?=(A))?(?=(AB))?(?:(?:A)|(?:AB))
Тем не менее я бы не советовал это делать. Вы можете намного легче искать каждый шаблон отдельно, а затем присоединиться к результатам.
string = "AABAABA"
result = [(g.start(), g.group()) for g in re.compile('A').finditer(string)]
result += [(g.start(), g.group()) for g in re.compile('AB').finditer(string)]