| 
    
            
         
         | 
    
  | 
найти часть строки в строке | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        slaifer123    
     naïve 
    01.10.24 
            ✎
    17:10 
 | 
         
        Добрый день, как найти слово в строке
 
        допустим имеем строку:"Привет, сегодня 1 января 2030 года". Нужно получить в новую переменную "сегодня 1 января" Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.156.21)  | 
|||
| 
    1
    
        Волшебник    
     01.10.24 
            ✎
    17:10 
 | 
         
        Найти()     
         | 
|||
| 
    2
    
        slaifer123    
     naïve 
    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
     | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |