Это должно сделать это довольно просто:
print(re.findall(r'\d{4}[-_]?\d{2}', 'Total revenue for 201603 is 3000 €'))
# ['201603']
В частности, это «Четыре цифры, за которыми следует либо ноль, либо одно вхождение либо '-'
, либо '_'
, а затем еще две цифры»,Если дефис или знак подчеркивания отсутствуют, четырехзначные и двухзначные цифры заканчиваются тем же, что и запрос шестизначного числа. однако, есть одна вещь, которую вы можете сделать, просто отфильтровав ее:
nums = re.findall(r'\d{4}[-_]?\d{2}', 'Total revenue for 2016-03 is 3000 €')
# nums = ['2016-03']
nums = [num.replace('-', '').replace('_', '') for num in nums]
# nums = ['201603']
Обратите внимание, что это решение, которое меньше всего мешает вашему исходному регулярному выражению, и будет искать этот шаблон из "четырехцифры, после которых может быть разделитель, а затем две цифры в любом месте строки. Если вы хотите ограничить это значение просто строкой, которую вы пытаетесь найти, игнорируя аналогичные строки, вам может понадобиться сделать регулярное выражение более конкретным. См. Также документацию re