Я использую Python 2.7.6. Я не могу понять следующий результат от re.findall
:
>>> re.findall('\d|\(\d,\d\)', '(6,7)')
['(6,7)']
Я ожидал, что вышеприведенное вернет ['6', '7']
, потому что согласно документации:
'|'
A|B, где A и B могут быть произвольными RE, создает регулярное выражение, которое будет соответствовать либо A, либо B. Произвольное количество RE может быть разделено символом '|' этим способом. Это также можно использовать внутри групп (см. ниже). Когда целевая строка сканируется, RE, разделенные символом '|' пробуют слева направо. Когда один шаблон полностью совпадает, эта ветвь принимается. Это означает, что как только A совпадет, B не будет подвергаться дальнейшему тестированию, даже если это приведет к более длительному общему совпадению. Другими словами, '|' оператор никогда не жадничает. Чтобы сопоставить литерал '|', используйте \| или заключите его в класс символов, как в [|].
Спасибо за вашу помощь
n [4]: re.findall(r'\d|\d,\d\)', '(6,7)') Out[4]: ['6', '7']
Удивительно, какая разница в (, а? Сначала было найдено возможное совпадение для второй вещи, так что это то, что совпало. - person NightShadeQueen   schedule 17.07.2015(
находится левее первой цифры. - person tobias_k   schedule 17.07.2015