Нет, программа не гарантируется segfault. Выделение указателя , которому было присвоено недопустимое значение, - это неопределенное поведение , а в стандарте четко указано, что неопределенное поведение не предъявляет никаких требований. Он может завершить выполнение программы, но это не обязательно; он может даже полностью игнорировать ситуацию:
3.4.3 поведение неопределенного поведения
1 при использовании непереносимой или ошибочной программной конструкции или ошибочных данных, для которых это Международный стандарт не налагает никаких требований
2 ПРИМЕЧАНИЕ. Возможное неопределенное поведение варьируется от полного игнорирования ситуации с непредсказуемыми результатами, поведения во время трансляции или выполнения программы документированным образом, характерным для окружающей среды (с или без выдачи диагностическое сообщение), до завершения перевода или выполнения (с выдачей диагностического сообщения).
blockquote>
re.findall
ваш друг здесь:
>>> import re
>>> sample = "[xy][abc]"
>>> re.findall(r'\[([^]]*)\]',sample)
['xy', 'abc']
>>> import re
>>> re.findall("\[(.*?)\]", "[xy][abc]")
['xy', 'abc']
Я подозреваю, что вы ищете re.findall
.
См. эту демонстрацию :
import re
my_regex = re.compile(r'\[([^][]+)\]')
print(my_regex.findall('[xy][abc]'))
['xy', 'abc']
Если вы хотите перебирать совпадения вместо строк соответствия, вы можете посмотреть re.finditer
. Для получения дополнительной информации см. Python re
docs .