如何使用 re 匹配模式并将模式保持在 python

how to use re to match a pattern and keep pattern in python

我在这样的列表中有一堆字符串: ['2000-01-01', '2000-22-01', '02000-2-2'...]

我想将所有元素转换成这个 ['2000-01-1', '2000-22-1', '2000-02-2'] 也就是说 [无零填充]-[零填充]-[无零填充]

最好的方法是什么?

您可以将 intzfill 一起使用:

import re
s = ['2000-01-01', '2000-22-01', '02000-2-2']
new_s = [f'{(k:=i.split("-"))[0]}-{k[1].zfill(2)}-{int(k[-1])}' for i in s]

输出:

['2000-01-1', '2000-22-1', '02000-02-2']

可能的无正则表达式解决方案:

inp = ['2000-01-01', '2000-22-01', '02000-2-2']
outp = []
for date in inp:
  nums = date.split("-")
  nums[0] = nums[0].lstrip("0")
  nums[2] = nums[2].lstrip("0")
  outp.append("-".join(nums))

捕获正则表达式组,然后修改它们。

import re

input_list = ['2000-01-01', '2000-22-01', '02000-2-2']

for some_date in input_list:
    print('\n', some_date)
    the_regex = r'(\d+)-(\d+)-(\d+)'

    year = re.search(the_regex, some_date).group(1).lstrip('0')  # year
    day = re.search(the_regex, some_date).group(2).zfill(2)      # day
    month = re.search(the_regex, some_date).group(3).lstrip('0') # month
    
    the_output = f'{year}-{day}-{month}'
    print(the_output)