Как можно улучшить сценарий, чтобы после каждого найденного времени добавлялось "(время местное)" в скобках?
Для извлечения последнего элемента времени из строки и добавления к нему произвольного текста можно воспользоваться следующим сценарием на языке 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); ...