|
найти часть строки в строке
vbus, Ногаминебить, Timon1405, maxab72, osa1C, nick86, Мультук, Stepashkin, bolder, DemMif, PR, Волшебник, M0rr0, yurikmellon2, RomaH, Доминошник, slaifer123, Argo, Смотрящий, zzz_zzz_zzz, Галахад, arsik, Fram, Группа неравнодушных, PLUT, ndrv, Буковка, laeg, ildary, Многолетний Апельсин, Ivanich, Rico_1C, XenoneX, El_Lipo, lexx256, Djelf, DrZombi, wolk, Климов Сергей, DimR_71, sikuda, MWWRuza, timurhv, АгентБезопаснойНацио, butterbean, Rovan, evorle145, LienXo, ЕRPe, Valdis2007, DemonShinji2, ads55, PuhUfa, Гена, Crusher, dmitn, Гипервизор, Прохожий, Prog_man, U4Me2, zgarick, formista2000, бегинер, rbcvg, Tarlich, SleepyHead
| ☑ |
0
slaifer123
01.10.24
✎
17:10
|
Добрый день, как найти слово в строке
допустим имеем строку:"Привет, сегодня 1 января 2030 года". Нужно получить в новую переменную "сегодня 1 января"
Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.156.21)
|
|
1
Волшебник
01.10.24
✎
17:10
|
Найти()
|
|
2
slaifer123
01.10.24
✎
17:13
|
(1) так ее убрали в каком-то релизе
|
|
3
Волшебник
01.10.24
✎
17:14
|
(2) Кто?!
Можете задействовать СтрНайти(), но Найти() благополучно существует в релизе 8.3.25.1394
|
|
4
Timon1405
01.10.24
✎
17:48
|
регулярки же завезли, можно тестировать
Стр="Привет, сегодня 1 января 2030 года";
М = СтрНайтиПоРегулярномуВыражению(Стр,"(сегодня\s.*)\d{4}",);
Если М.ПолучитьГруппы().Количество()>0 Тогда
Результат = М.ПолучитьГруппы()[0].Значение;
Иначе
Результат= "";
КонецЕсли
|
|
5
Волшебник
02.10.24
✎
10:13
|
(4) Вы забили микроскопом гвоздь.
|
|
6
Timon1405
02.10.24
✎
10:53
|
(5) не очень понимаю какая альтернатива со стрнайти()? год же может быть любым.
|
|
7
Волшебник
02.10.24
✎
10:54
|
(6) Задача из сабжа попросту невозможна, а Вы бросились её решать регулярками. Надо отучить автора от постановки таких задач. Вот что мы должны сделать. Регулярки тут не помогут.
|
|
8
Timon1405
02.10.24
✎
11:00
|
(7) можно же рассматривать задачу как упражнение. парсинг даты - довольно частая задача, например в разборе платежек
|
|
9
Волшебник
02.10.24
✎
11:07
|
(8) Ок, имеем строки:
"Привет, сегодня 1 января 2030 года"
"Привет, сегодня 29 февраля 2056 года"
Как получить даты?
|
|
10
maxab72
02.10.24
✎
11:18
|
угу, разобрать дату в строке "Сегодня 24/10/02 в 10:00"...
|
|
11
Гена
02.10.24
✎
11:20
|
(9) Текст между вторым и четвёртым пробелом?
|
|
12
Волшебник
02.10.24
✎
11:22
|
(9)+ ChatGPT справился, только программный код на питоне
программный код
import re
from datetime import datetime
def parse_date_from_string(s):
# Паттерн для поиска даты в формате "день месяц год"
pattern = r"(\d{1,2}) (\w+) (\d{4})"
# Поиск всех совпадений с паттерном
match = re.search(pattern, s)
if match:
day, month_str, year = match.groups()
# Словарь для преобразования названий месяцев на русском языке в их числовой формат
months = {
"января": "01", "февраля": "02", "марта": "03",
"апреля": "04", "мая": "05", "июня": "06",
"июля": "07", "августа": "08", "сентября": "09",
"октября": "10", "ноября": "11", "декабря": "12"
}
# Получение числового представления месяца
month = months.get(month_str.lower())
if month:
# Формирование даты в формате "день/месяц/год"
date_str = f"{int(day):02}/{month}/{year}"
try:
# Преобразование строки в объект даты
date_obj = datetime.strptime(date_str, "%d/%m/%Y")
return date_obj
except ValueError:
return None
return None
# Примеры использования:
print(parse_date_from_string("Привет, сегодня 1 января 2030 года"))
print(parse_date_from_string("Привет, сегодня 29 февраля 2056 года"))
Вывод:
2030-01-01 00:00:00
2056-02-29 00:00:00
|
|
13
maxab72
02.10.24
✎
11:23
|
"Мартобря 86 числа. Между днем и ночью."
А еще народ ленится и любит сокращать: 12 янв 24
|
|
14
Волшебник
02.10.24
✎
11:24
|
(13) Здесь нет даты.
|
|
15
butterbean
02.10.24
✎
11:42
|
(14) чат GPT нашел в этом тексте дату "12 января 2024 года"
|
|
16
DrZombi
02.10.24
✎
12:20
|
(2) Её убрали из помощника, а оно таки осталось там где и была.
...да в каком то релизе, (я не помню сам), оно было убрано физически, но этот релиз так быстро сменился, что мало кто что-то заметил... :)
|
|
17
Волшебник
02.10.24
✎
14:10
|
(15) Сообщение было отредактировано
|
|
18
maxab72
02.10.24
✎
14:32
|
(17) а можно на форуме выводить отметку, что сообщение было отредактировано, и завести поле, типа "пояснение о причинах редактирования", обязательное к заполнению? и выводить эту причину как историю внизу сообщения курсивом? и дату редактирования.
|
|
19
Мультук
02.10.24
✎
14:35
|
P.S.
Дело было давно, но имхо всё же было
Давным давно msaccess считал, что
08/10/02 = 10.08.2022
но уже
13/10/02 = 13.10.2022
Это бага или фича?
Или я вру и уже ничего не помню?
|
|
20
Волшебник
02.10.24
✎
15:17
|
(18) Разрешаю.
|
|
21
vbus
02.10.24
✎
15:39
|
(9)
Упражнение
&НаСервере
Функция НайтиДатыНаСервере(Стр)
Мес = Новый Структура("января,февраля,марта,апреля,мая,июня,июля,августа,сентября,октября,ноября,декабря", 1,2,3,4,5,6,7,8,9,10,11,12);
РегВыр = "\b(\d{1,2})\s+(января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря)\s+(\d{4})\b";
СтрДаты=СтрНайтиПоРегулярномуВыражению(Стр, РегВыр);
МассивСлов = СтрНайтиВсеПоРегулярномуВыражению(СтрДаты.Значение, "\b\w+\b");
Возврат Дата(МассивСлов[2].Значение, Мес[МассивСлов[1].Значение], МассивСлов[0].Значение);
КонецФункции
&НаСервере
Процедура ПоискДат()
Строки = Новый Массив;
Строки.Добавить("Привет, сегодня 1 января 2030 года");
Строки.Добавить("Привет, сегодня 29 февраля 2056 года");
Для Каждого Стр Из Строки Цикл
Сообщить(НайтиДатыНаСервере(Стр))
КонецЦикла;
КонецПроцедуры
01.01.2030 0:00:00
29.02.2056 0:00:00
|
|