import re
input_text = "el dia 2022-12-23 o sino el dia 2022-09-23 10000-08-23" #example
date_capture_pattern = r"([12]\d*-[01]\d-[0-3]\d)(\D*?)"
#input_text = re.sub(date_capture_pattern , lambda m: print(repr(m[1])) , input_text)
input_text = re.sub(date_capture_pattern , lambda m: m[1].replace("_-_", "-", 2) , input_text)
print(repr(input_text))
使用print()
时,我注意到捕获组m[1]
正确地捕获了它们,因为它能够正确地打印3个日期。
然而,我觉得lambda函数lambda m: m[1].replace("_-_", "-", 2)
的语法(在python中)中有一些东西不允许替换,也就是说,即使lambda函数正确地接收到信息,它也不能返回它。
我需要的输出是
"el dia 2022_-_12_-_23 o sino el dia 2022_-_09_-_23 10000_-_08_-_23"
应该澄清的是,问题中的代码不会在控制台中生成任何错误,但是它不能正常工作,因为它仅限于删除原始字符串中的捕获组
lambda函数有什么问题吗?
3条答案
按热度按时间euoag5mw1#
顺序应为
"-"
,然后为"_-_"
您也可以使用一个简单的字符串函数
replace()
来实现这一点。因为input_text是一个字符串。
sz81bmfz2#
您的替换逻辑关闭。您应该搜索
-
并替换为_-_
。请使用此版本:另请注意,此处无需使用捕获组。
n1bvdmb63#
使用lambda函数有什么原因吗?一个简单的替换就足够了。
代码:
输出: