Как можно улучшить сценарий, чтобы после каждого найденного времени добавлялось "(время местное)" в скобках?
Для извлечения последнего элемента времени из строки и добавления к нему произвольного текста можно воспользоваться следующим сценарием на языке Python: ```python import re # Исходная строка с временем string = "Сегодня было занятие. Время окончания - 18:30" # Извлекаем последнее время из строки pattern = r'\d{2}:\d{2}' matches = re.findall(pattern, string) last_time = matches[-1] # Добавляем произвольный текст к последнему времени new_string = string.replace(last_time, last_time + " добавленный текст") # Пример добавления текста "добавленный текст" print(new_string) ``` Чтобы улучшить сценарий и добавить "(время местное)" после каждого найденного времени в скобках, можно использовать такой код: ```python import re # Исходная строка с временем string = "Сегодня было занятие. Время окончания - 14:30, начало - 09:00" # Извлекаем время из строки pattern = r'\d{2}:\d{2}' matches = re.findall(pattern, string) # Добавляем "(время местное)" после каждого найденного времени new_string = string for match in matches: new_string = new_string.replace(match, match + " (время местное)") print(new_string) ``` Этот сценарий будет искать все времена в строке и добавлять после каждого времени "(время местное)" в скобках.
const addTimeDescription = (str) => str.replace(/\b\d{1,2}:\d{2}\b(?!.*?\b\d{1,2}:\d{2}\b)/, '$& (время местное)'); // пример использования const originalString = " с 14:01 к 15:00 работать по плановому"; const updatedString = addTimeDescription(originalString); // ' с 14:01 к 15:00 (время местное) работать по плановому'
здесь берем только то совпадение, после которого нет другого совпадения.
самый интересный момент - ".*?" вместо ".*" , благодаря этому регулярка на порядки быстрее работает на длинных строках с кучей отметок времени
update: более простая регулярка, на основе жадности:
/.*\b\d\d?:\d\d\b/
- .replace(new RegExp(`\\b${ lastTime }\\b`) + .replaceAll(new RegExp(`\\b${ lastTime }\\b`, `g`)
Но тут надо понимать, чего вообще вы ожидаете. Например, для строки "плановые подвиги в 12:19, 13:59 и 14:00, ужин в 14:00" обе версии кода вернут "плановые подвиги в 12:19, 13:59 и 14:00, ужин в 20:00 (время местное)" , а вот для "плановые подвиги в 12:19, 13:59 и 14:00, обед в 14:00" ваша версия вернёт "плановые подвиги в 12:19, 13:59 и 14:00 (время местное), обед в 14:00" , а моя - "плановые подвиги в 12:19, 13:59 и 14:00 (время местное), обед в 14:00 (время местное)" .
Может, должно заменяться только в принципе последнее значение времени (т.е. "плановые подвиги в 12:19, 13:59 и 14:00, обед в 14:00 (время местное)" )?
const str = 'с 14:01 к 15:00 работать по плановому'; console.log(str.replace(/(\d\d:\d\d)(?!.*\d\d:\d\d)/, (s) => s + ' (время местное)')); // с 14:01 к 15:00 (время местное) работать по плановому
... if (matches) { const updatedString = originalString.split(lastTime).toSpliced(-1,0,appendText).join(lastTime); ...