代码之家  ›  专栏  ›  技术社区  ›  x89

正则表达式从列表中筛选日期

  •  0
  • x89  · 技术社区  · 4 年前

    我有一个清单如下:

    ['','2022-03-31', 'euss', 'projects','2021-03-31']
    

    我想编写一个正则表达式,这样我就可以从列表中删除所有其他项,只保留那些具有日期格式的项。例如,2022-03-31和2021-03-31。

    我尝试过这个方法,但当我打印出我的列表时,似乎没有什么不同:

    my_list = [re.sub(r"(\d+)/(\d+)/(\d+)",r"\3-\1-\2",i) for i in list(my_list) ]
    
    1 回复  |  直到 4 年前
        1
  •  1
  •   Wiktor Stribiżew    4 年前

    您可以首先检查是否有与字符串匹配的正则表达式:

    result = []
    rx = re.compile(r'(\d+)-(\d+)-(\d+)')
    for i in my_list:
        if rx.search(i):                          # Check if the regex matches the string
            result.append(rx.sub(r"\3-\1-\2", i)) # Add modified string to resulting list
    

    看到了吗 Python demo . 输出:

    ['31-2022-03', '31-2021-03']
    

    你可以这样写:

    rx = re.compile(r'(\d+)-(\d+)-(\d+)')
    my_list = [rx.sub(r"\3-\1-\2", i) for i in my_list if rx.search(i)]