# если использовать при токенизации \d+ - все ОК
re.findall(r'[()+\-*/]|\d+', '12*(15+5*2)/3+(6/2+8)')
['12', '*', '(', '15', '+', '5', '*', '2', ')', '/', '3', '+', '(', '6', '/', '2', '+', '8', ')']
# если использовать при токенизации (\d+) - пропадают операции
re.findall(r'[()+\-*/]|(\d+)', '12*(5+5*2)/3+(6/2+8)')
['12', '', '', '5', '', '5', '', '2', '', '', '3', '', '', '6', '', '2', '', '8', '']
I>I># если использовать при токенизации (\d+) - пропадают операции
I>re.findall(r'[()+\-*/]|(\d+)', '12*(5+5*2)/3+(6/2+8)')
I>['12', '', '', '5', '', '5', '', '2', '', '', '3', '', '', '6', '', '2', '', '8', '']
I>
> If one or more groups are present in the pattern, return a list of groups; this will be a list of tuples if the pattern has more than one group. доки re.findall
Если нужны и операции тоже, нужно и их в группу положить.
Здравствуйте, ioctl, Вы писали:
Какой именно python3? Там шли заметные изменения в движке. И есть ещё такое замечание:
Note
Due to the limitation of the current implementation the character following an empty match is not included in a next match, so findall(r'^|\w+', 'two words') returns ['', 'wo', 'words'] (note missed “t”). This is changed in Python 3.7.