import re, datetime
input_text = "Por las mañanas de verano voy a la playa, y en la manana del 22-12-22 16:22 pm o quizas mañana en la mañana hay que estar alli y no 2022-12-22 a la manana"
today = datetime.date.today()
tomorrow = str(today + datetime.timedelta(days = 1))
input_text = re.sub(r"b(?:las|la)b[s|]*(?:mañana|manana)bss*b", tomorrow, input_text)
print(repr(input_text)) # --> output
为什么我设置的限制失败了?
目标是不能有任何这些选项(?:las|la)
,目标是在模式(?:mañana|manana)
前面不能有任何这些选项,并且在它后面不能有字母's'
后面跟着一个或多个空格ss*
这是正确输出在适当的情况下,你应该在替换后得到
"Por las mañanas de verano voy a la playa, y en la manana del 22-12-22 16:22 pm o quizas 22-12-23 en la mañana hay que estar alli y no 2022-12-22 a la manana"
可以使用
re.sub(r"b(las?s+)?ma[ñn]ana(?!sb)", lambda x: x.group() if x.group(1) else tomorrow, input_text)
正则表达式匹配
b
- a字边界(las?s+)?
-可选的la
或las
后面跟着一个或多个空格ma[ñn]ana
-mañana
或manana
(?!sb)
-如果在单词的末尾有一个s
字母,则会导致匹配失败。
如果组1匹配,则不进行替换,如果不匹配,则替换为tomorrow
。