Это правильный синтаксис:
substring = 'base'
filtered_args = page_iterator.search(f"AutoScalingGroups[?!contains(AutoScalingGroupName,`{substring}`)][]")
Если вы предпочитаете «синтаксис формата» вместо f-строк, вы, конечно, также можете написать:
filtered_args = page_iterator.search("AutoScalingGroups[?!contains(AutoScalingGroupName,`{}`)][]".format(substring))
И если подстрока 'base' является константой, вы также можете записать ее непосредственно в выражение:
filtered_args = page_iterator.search("AutoScalingGroups[?!contains(AutoScalingGroupName,`base`)][]")
Большую часть времени вас не интересует все содержание синтаксиса ответа. Если вы просто заботитесь о названии группы, вы можете написать:
filtered_args = (page['AutoScalingGroupName'] for page in page_iterator.search("AutoScalingGroups[?!contains(AutoScalingGroupName,`base`)][]"))
Если вы предпочитаете список в качестве результата перед генератором, вы можете просто заменить окружающие скобки квадратными скобками:
filtered_args = [page['AutoScalingGroupName'] for page in page_iterator.search("AutoScalingGroups[?!contains(AutoScalingGroupName,`base`)][]")]