我想获取第一个文件 5-1-2016 ,而不是像上面那样获取整个日期,而不是我想要的第二个文件 15-1-15 2016 ,第三次 2016年1月10日,依此类推(没有领先的僵尸)。
预期输出应如下所示:
我正在 python 上执行此操作。
答案 0 :(得分:1)
您可以使用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']
答案 1 :(得分: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
答案 2 :(得分:1)
在最原始的方式下,我会采用以下解决方案:
([[1-9])([0-9])-([0-9] +)-([0-9] +)|([0-9])-([0-9] +)-([0-9] +)