Как можно улучшить сценарий, чтобы после каждого найденного времени добавлялось "(время местное)" в скобках?
Для извлечения последнего элемента времени из строки и добавления к нему произвольного текста можно воспользоваться следующим сценарием на языке 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)
```
Этот сценарий будет искать все времена в строке и добавлять после каждого времени "(время местное)" в скобках.
<pre><code class="javascript">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 (время местное) работать по плановому'</code></pre> <br/> <br/> здесь берем только то совпадение, после которого нет другого совпадения. <br/> <br/> самый интересный момент - <b> ".*?" </b> вместо <b>".*"</b> , благодаря этому регулярка на порядки быстрее работает на длинных строках с кучей отметок времени <br/> <br/> update: более простая регулярка, на основе жадности: <br/> <code class="javascript">/.*\b\d\d?:\d\d\b/</code>
<pre><code class="diff">- .replace(new RegExp(`\\b${ lastTime }\\b`)
+ .replaceAll(new RegExp(`\\b${ lastTime }\\b`, `g`)</code></pre> <br/> <br/> Но тут надо понимать, чего вообще вы ожидаете. Например, для строки <i>"плановые подвиги в 12:19, 13:59 и 14:00, ужин в 14:00"</i> обе версии кода вернут <i>"плановые подвиги в 12:19, 13:59 и 14:00, ужин в 20:00 (время местное)"</i> , а вот для <i>"плановые подвиги в 12:19, 13:59 и 14:00, обед в 14:00"</i> ваша версия вернёт <i>"плановые подвиги в 12:19, 13:59 и 14:00 (время местное), обед в 14:00"</i> , а моя - <i>"плановые подвиги в 12:19, 13:59 и 14:00 (время местное), обед в 14:00 (время местное)"</i> . <br/> Может, должно заменяться только в принципе последнее значение времени (т.е. <i>"плановые подвиги в 12:19, 13:59 и 14:00, обед в 14:00 (время местное)"</i> )?
<pre><code class="javascript">const str = 'с 14:01 к 15:00 работать по плановому'; console.log(str.replace(/(\d\d:\d\d)(?!.*\d\d:\d\d)/, (s) => s + ' (время местное)')); // с 14:01 к 15:00 (время местное) работать по плановому</code></pre>
<pre><code class="javascript">...
if (matches) {
const updatedString = originalString.split(lastTime).toSpliced(-1,0,appendText).join(lastTime);
...</code></pre>