import re, datetime
def modify_function(match):
input_text_substring = match.group()
current_year = datetime.datetime.today().strftime('%Y')
input_text_substring = re.sub(r"[\s|]*de[\s|]*" current_year, "", input_text_substring, 1)
return input_text_substring
#Example input cases
input_text = '[26 -- 31] de 10 del 200 de 2022' #example 1
input_text = '[26 -- 31] de 12 del 206 del 2022' #example 2
input_text = '[06 -- 11] del 09 del ano 2020 del 2022' #example 3
#modular regex parts
possible_year_num = r"\d*" #I need one or more numbers (one or more numeric digits but never any number)
current_year = datetime.datetime.today().strftime('%Y')
month_context_regex = r"[\s|]*(?:del[\s|]*mes|de[\s|]*el[\s|]*mes|de[\s|]*mes|del|de[\s|]*el|de)[\s|]*"
year_context_regex = r"[\s|]*(?:del[\s|]*a?o|de[\s|]*el[\s|]*a?o|de[\s|]*a?o|del[\s|]*ano|de[\s|]*el[\s|]*ano|de[\s|]*ano|del|de[\s|]*el|de)[\s|]*"
#I combine those modular regex expressions to build a regex that serves to identify the substring in which the replacement must be performed
identity_replacement_case_regex = r"\[\d{2}" " -- " r"\d{2}]" month_context_regex r"\d{2}" year_context_regex possible_year_num year_context_regex current_year
input_text = re.sub(identity_replacement_case_regex, modify_function, input_text)
print(repr(input_text)) # --> output
正確的輸出應如下所示:
'[26 -- 31] de 10 del 200' #for example 1
'[26 -- 31] de 12 del 206' #for example 2
'[06 -- 11] del 09 del ano 2020' #for example 3
我想實作同樣的事情,但在這種情況下不必呼叫獨立的函式,呼叫的函式modify_function將要求在同一行內,可以將lambda 函式input_text = re.sub(identity_replacement_case_regex, modify_function, input_text)的結果作為替換引數傳遞。

問題中的程式代碼運行良好,但是......出于實際原因,它不必求助于主代碼的外部函式,因此需要從 lambda 函式獲得該lambda input_text, current_year: expression引數等效于呼叫的函式modify_function
uj5u.com熱心網友回復:
看起來你想要:
lambda m: re.sub(r"[\s|]*de[\s|]*" datetime.datetime.today().strftime('%Y'), "", m.group(), 1)
你可以在你的代碼中使用它:
input_text = re.sub(identity_replacement_case_regex,
lambda m: re.sub(r"[\s|]*de[\s|]*" datetime.datetime.today().strftime('%Y'), "", m.group(), 1),
input_text)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/517012.html
下一篇:在Django視圖中觸發長行程
