Используйте не жадное совпадение для первой половины и жадное (по умолчанию) совпадение для второй половины:
import re
regex_end = re.compile(r"([a-zA-Z0-9.',_&%+\s-]+?)(\.*)$")
test = ["test", "test.", "test...", "test....", "t...est. ..."]
for t in test:
print (re.findall(regex_end, t))
приводит к правильным результатам
[('test', '')]
[('test', '.')]
[('test', '...')]
[('test', '....')]
[('t...est. ', '...')]