0
import re, datetime


#Ejemplos en donde si se debe hacer uno o mas reemplazos
input_text = "Decian muchas cosas; Seguro eso ocurrira despues de 3 dias"
input_text = "seguro eso ocurrira despues de 3 dias.\n empieza el 2021-11-12"
input_text = "Recien el 2021-10-12; seguro eso ocurrira despues de 3 dias."


#Ejemplos en donde no se deberia hacer ningun reemplazo
input_text = "seguro eso ocurrira despues de 3 dias. empieza el 2021-11-12"
input_text = "Recien el 2021-10-12, seguro eso ocurrira despues 3 dias."



#operation function (  ([12]\d{3}-[01]\d-[0-3]\d)(\D*?), (\d+) , "add" )
def add_or_subtract_days(datestr, days, operation):
    today = datetime.date.today()
    if   operation == "add" : x = (datetime.datetime.strptime(today, "%Y-%m-%d") + datetime.timedelta(days=int(days))).strftime('%Y-%m-%d')
    elif operation == "subtract" : x = (datetime.datetime.strptime(today, "%Y-%m-%d") - datetime.timedelta(days=int(days))).strftime('%Y-%m-%d')

    return x


some_text = r"[\s|]*" 

input_text = re.sub(r"(?:([12]\d{3}-[01]\d-[0-3]\d)(\D*?)|)" + some_text + r"(?:(?:pasados|pasado|despues del|despues de el|despues de|despues|tras) (\d+) (?:días|día|dias|dia)|(\d+) (?:días|día|dias|dia) (?:pasados|pasado|despues del|despues de el|despues de|despues|tras))" + some_text + r"(?:([12]\d{3}-[01]\d-[0-3]\d)(\D*?)|)",
                lambda m: print(m[3]) ,
                #lambda m: add_or_subtract_days(  m[1] or m[4] , m[2] or m[3] , "add" ),
                input_text)


print("output: " + repr(input_text)) # ---> output

You should only perform the replace only if there is at least one ";" or ".\n" between "(pasado|despues|tras) n (dias|dia)" and the date "\d*-\d{2}-\d{2}"

output that I need (today = 2022-12-13):

"Decian muchas cosas; Seguro eso ocurrira 2022-12-16"
"seguro eso ocurrira 2022-12-16.\n empieza el 2021-11-12"
"Recien el 2021-10-12; seguro eso ocurrira despues de 2022-12-16."

In this last two examples no replacement is made since there is no ; or \n. in the middle of the capture groups
"seguro eso ocurrira despues de 3 dias. empieza el 2021-11-12"
"Recien el 2021-10-12, seguro eso ocurrira despues de 3 dias."
Matt095
  • 857
  • 3
  • 9
  • 1
    At a guess, `(pasado|despues|tras) n (dias|dia).*(;|\.\n).*\d*-\d{2}-\d{2}`. None of your examples match against `(pasado|despues|tras) n (dias|dia)` though. – Ouroborus Dec 13 '22 at 20:37
  • @Ouroborus I removed them by accident, when I summarized the regex to put it in the question, but it would be like this `(pasados|pasado|despues del|despues de el|despues de|despues|tras) n (dias|dia).*(;|\.\n).*\d*-\d{2}-\d{2}`, where n is a number `\d*`. – Matt095 Dec 13 '22 at 21:05

0 Answers0