【问题标题】:Regex that doesnt match 0 at the beginning for every group在每个组的开头不匹配 0 的正则表达式
【发布时间】:2018-08-11 17:51:42
【问题描述】:
  1. 01 Ded.PASIVIC 05-01-2016.xlsx
  2. 01 Ded.PASIVIC 15-01-2016.xlsx
  3. 01 Ded.PASIVIC 10-01-2016.xlsx
  4. 06 DED。 PASIVIC 30-03-2016 (1).xlsx
  5. 19 演绎被动式 DEL 15-10-2016.xlsx (2)
  6. 23 演绎被动式 DEL 15-12-2016.xlsx (1)
  7. 18 APORTE PASIVIC DEL 30-09-2016.xlsx

我想获取上面文件名上打印的日期 但没有前导零。

我想获取第一个文件 5-1-2016,而不是像上面那样获取整个日期,第二个文件我想要 15-1- 2016,第三次 10-1-2016 以此类推(NO LEADING ZEROS)。

预期的输出应该是这样的:

  1. 5-1-2016
  2. 15-1-2016
  3. 2016 年 10 月 1 日
  4. 30-3-2016
  5. 15-10-2016
  6. 15-12-2016
  7. 30-9-2016

我在 python 上执行此操作。

【问题讨论】:

    标签: regex regex-group regex-greedy


    【解决方案1】:

    您可以匹配 3 个组,前 2 个组匹配一个可选的零,然后捕获 1 或 2 次数字 0?([0-9]{1,2}-),后跟一个破折号。

    您可以在开头和结尾添加word boundary \b。

    ^.*?\b0?([0-9]{1,2}-)0?([0-9]{1,2}-)([0-9]{4})\b.*$

    然后您可以使用 sub 并在替换中使用捕获组:

    \1\2\3

    import re
    regex = r"^.*?\b0?([0-9]{1,2}-)0?([0-9]{1,2}-)([0-9]{4})\b.*$"
    test_str = "01 Ded.PASIVIC 05-01-2016.xlsx"
    subst = r"\1\2\3"
    result = re.sub(regex, subst, test_str, 1)
    
    if result:
        print (result) # 5-1-2016
    

    Demo

    【讨论】:

      【解决方案2】:

      您可以使用re.findall 和re.sub 分两步完成此操作:

      import re
      
      data = """
      01 Ded.PASIVIC 05-01-2016.xlsx 
      01 Ded.PASIVIC 15-01-2016.xlsx 
      01 Ded.PASIVIC 10-01-2016.xlsx 
      06 DED. PASIVIC 30-03-2016 (1).xlsx 
      19 DEDUCCION PASIVIC DEL 15-10-2016.xlsx (2) 
      23 DEDUCCION PASIVIC DEL 15-12-2016.xlsx (1) 
      18 APORTE PASIVIC DEL 30-09-2016.xlsx
      """
      
      matches = re.findall('(?:[0-9]{2}-){2}[0-9]{4}',data)
      print(re.sub('0(?=[0-9]-)','',str(matches)))
      

      打印:

      ['5-1-2016', '15-1-2016', '10-1-2016', '30-3-2016', '15-10-2016', '15-12-2016', '30-9-2016']
      

      【讨论】:

        【解决方案3】:

        我会以最原始的方式使用这个解决方案:

        ([1-9])([0-9])-([0-9]+)-([0-9]+)|([0-9])-([0-9] +)-([0-9]+)

        【讨论】:

          猜你喜欢
          • 2013-02-01
          • 2019-06-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-18
          相关资源
          最近更新 更多