Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于更改日期格式的Python正则表达式_Python_Regex - Fatal编程技术网

用于更改日期格式的Python正则表达式

用于更改日期格式的Python正则表达式,python,regex,Python,Regex,我有一个表示日期的字符串数组,如“2015-6-03”,我想将其转换为格式“2015-06-03” 我希望使用正则表达式,而不是使用丑陋的循环进行替换。大致如下: str.replace('(-){1}(\d){1}(-){1}', '-0{my digit here}-') 这样的事情可能吗 是的,正则表达式可以实现您想要的功能 \d+-(\d)-\d+ 因此,要替换它,您可以使用 import re target = "2015-6-05" out = re.sub(r'\d+-(\

我有一个表示日期的字符串数组,如“2015-6-03”,我想将其转换为格式“2015-06-03”

我希望使用正则表达式,而不是使用丑陋的循环进行替换。大致如下:

str.replace('(-){1}(\d){1}(-){1}', '-0{my digit here}-')

这样的事情可能吗

是的,正则表达式可以实现您想要的功能

 \d+-(\d)-\d+
因此,要替换它,您可以使用

import re

target = "2015-6-05"
out = re.sub(r'\d+-(\d)-\d+','(0\\1)', target)

您不必从匹配中检索数字。可以将一位数月份之前的连字符替换为-0

像这样:

re.sub('-(?=\d-)', '-0', text)
请注意?=\d-是一个非捕获表达式,因为左括号后面跟有特殊序列?=。这就是为什么只有连字符被替换

测试:

结果:

'2015-09-03  2015-06-03  2015-01-03 2015-10-03'

类似于

import re

def replaceRegex(what, pattern, filler):
regex = re.compile(pattern)
match = regex.match(what)
if match != None:
    from, to = match.span()
    return what.replace(what[from : to], filler)
else:
    return None

可能会对您有所帮助。

不需要正则表达式,您可以将其作为datetime对象加载,并在打印时按要求格式化字符串:

import datetime
s = '2015-6-03'        
date_obj = datetime.datetime.strptime(s, '%Y-%m-%d')
print "%d-%02d-%02d" % (date_obj.year, date_obj.month, date_obj.day)
输出


你在找re.sub。查阅文档并试用。谢谢!这正是我需要的谢谢你的解决方案。你是对的,这将适用于我的用例,但我想开始更好地学习regex,所以我相信我最终会使用regex实现。非常感谢
import datetime
s = '2015-6-03'        
date_obj = datetime.datetime.strptime(s, '%Y-%m-%d')
print "%d-%02d-%02d" % (date_obj.year, date_obj.month, date_obj.day)
2015-06-03