如何实现:正则对一段文本匹配并用自定义函数替换匹配内容

diyinyu0476 diyinyu0476 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
Python
我的需求是将一个文件中所有的日期(格式为:七月 08, 2017 9:30:10 上午)换成标准格式日期。
其中parse函数已经写好(接收此类日期字符串,并返回datetime类型)
但是我试图匹配并替换的时候发现问题了:python中re.sub()的替换内容是固定的字符串,没办法用自己的函数来替换
replace()函数同样无法将匹配到的字符串作为函数的参数。
请教各位大神们,谢谢!

转换函数

def parse_cn_date(date_str):
"""
源文件 catalina.2017-06-06.log
日期格式 七月 08, 2017 9:30:10 上午
:param date_str: <unicode> raw date
:return: <datetime>
"""
if not isinstance(date_str, unicode):
raise AttributeError

month_regex = u'([\u4e00]|[\u4e8c]|[\u4e09]|[\u56db]|[\u4e94]|[\u516d]' \
u'|[\u4e03]|[\u516b]|[\u4e5d]|[\u5341]){1,2}[\u6708]'
year = int(re.search(u'\d{4} ', date_str).group().strip())
day = int(re.search(u'\d{2},', date_str).group()[:-1])
month = int(month_dict[re.search(month_regex, date_str).group()])
is_pm = re.search(u'[\u4e00-\u9fa5][\u5348]', date_str).group()[0] == u'下'
time = re.search(u'\d{1,2}:\d{1,2}:\d{1,2}', date_str).group()
hour = int(time.split(u':')[0])
if is_pm:
hour += 12
minute = int(time.split(u':')[1])
second = int(time.split(u':')[2])
return datetime(year, month, day, hour, minute, second)
...全文

相关推荐

评论 4
收藏 已收藏
分享
返回顶部
diyinyu0476
脚本语言 37,737 成员 34,208 内容