import re
regex = re.compile(r"(?:[aeAE][lI][ -])?(?:[GKQ]h?|Qu)[aeu]([tdz]{1,2}[h']?)\1?af{1,2}[iy]")
test_str = ("AI Kadafi\n"
"Al Gaddafi\n"
"Al Ghaddafi\n"
"Al Qaddafi\n"
"Al Qathafi\n"
"Al-Gathafi\n"
"Al-Kaddafi\n"
"El Gaddafi\n"
"El Kadhafi\n"
"El Kazzafi\n"
"El Qaddafi\n"
"El Qathafi\n"
"Gadaffi\n"
"Gadafi\n"
"Gadafy\n"
"Gaddafi\n"
"Gaddhafi\n"
"Gadhafi\n"
"Gathafi\n"
"Ghadaffi\n"
"Ghadafi\n"
"Ghaddafi\n"
"Ghaddafy\n"
"Gheddafi\n"
"Kad'afi\n"
"Kadaffi\n"
"Kaddafi\n"
"Kadhafi\n"
"Kazzafi\n"
"Khadaffy\n"
"Khadafy\n"
"Khaddafi\n"
"Qadafi\n"
"Qaddafi\n"
"Qadhafi\n"
"Qadhdhafi\n"
"Qadthafi\n"
"Qathafi\n"
"Quathafi\n"
"Qudhafi\n"
"al Gaddafi\n"
"al Ghaddafi\n"
"al-Gaddafi\n"
"al-Kad'afi\n"
"al-Kadafi\n"
"al-Khaddafi\n"
"al-Qadafi\n"
"al-Qaddafi\n"
"al-Qadhafi\n"
"al-Qadhdhafi\n"
"el Gaddafi\n"
"el Gaddafy\n"
"el Gadhafi\n"
"el Qaddafi\n"
"el-Gadhafi")
subst = "\\1\\2\\3\\3\\2\\1"
result = regex.sub(subst, test_str)
if result:
print(result)
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Python, please visit: https://docs.python.org/3/library/re.html