Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/34: Рейтинг темы: голосов - 34, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 14.10.2017
Сообщений: 14

Выбрать из текста (из списка) все даты

25.03.2018, 21:19. Показов 7057. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
выбрать из текста (из списка) все даты
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.03.2018, 21:19
Ответы с готовыми решениями:

Нужно выбрать 2 даты из текста
Пытаюсь сам, но не получаеться. Нужно чтобы было 2 даты - Дата размещения и дата изменения, без времени. $text = 'Дата размещения...

Выбрать из текста все email-ы
Друзья, в переменной $a содержится текст мне нужно из него выбрать все эмейлы, подскажите как это сделать) Добавлено через 40 минут ...

Выбрать из числового списка все элементы, кратные 3
Помогите пожалуйста с решением) Выбрать из числового списка все элементы, делящиеся на 3, и сформировать из них список.

19
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
26.03.2018, 05:48
Python
1
2
3
4
5
6
7
8
9
#!/usr/bin/env python3
import re
 
t = '''\
Встреча состоится 13.03.2037 или может быть
19.05.2017. Или нет.
'''
 
print(re.findall(r'\d{2}\.\d{2}\.\d{4}', t))
1
0 / 0 / 0
Регистрация: 14.10.2017
Сообщений: 14
26.03.2018, 11:10  [ТС]
Рыжий Лис, а если вот такая дата 7 ноября 1917?
0
 Аватар для blz
151 / 102 / 33
Регистрация: 11.08.2016
Сообщений: 574
26.03.2018, 12:28
«позавчера» тоже можно считать датой. как и «500 A.D.»
пишете регулярки для каждого поддерживаемого в вашем контексте формата даты, потом re_expr.find*()
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
26.03.2018, 12:41
Python
1
2
3
4
5
6
7
8
#!/usr/bin/env python3
import re
 
t = '''\
Встреча состоится 7 ноября 1917 или может быть
'''
 
print(re.findall(r'(\d{1,2})\s+(января|февраля|ноября)\s+(\d{4})', t))
1
 Аватар для blz
151 / 102 / 33
Регистрация: 11.08.2016
Сообщений: 574
26.03.2018, 12:47
99 января 0000

Добавлено через 3 минуты
Навряд ли имеются в виду все форматы, упомянутые в ISO или просто имеющие распространение. Поэтому ТС надо сначала определиться с тем, что такое дата в данном контексте.
0
0 / 0 / 0
Регистрация: 14.10.2017
Сообщений: 14
26.03.2018, 12:57  [ТС]
blz, а как учесть окончание месяца? re.findall(r'\d\s\январь|февраль|март|ап рель|май|июнь|июль|август|сентябрь|октяб рь|ноябрь|декабрь\s\d{4}',str)
0
 Аватар для blz
151 / 102 / 33
Регистрация: 11.08.2016
Сообщений: 574
26.03.2018, 13:09
koly121121:
если Вы намекаете на то, что датой считается и 01 Январь 1970 и 31 января 2018, то
январ(?:ь|я) итд… ах да, август(?:|а)
(?:...) – это non-capturing group.

Добавлено через 1 минуту
re.I не забывайте добавлять, чтобы матчинг был нечувствительным к регистру
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
26.03.2018, 13:18
Цитата Сообщение от koly121121 Посмотреть сообщение
\d
Это одна цифра. Чтобы выбиралось от одной до двух: \d{1,2}

Добавлено через 2 минуты
Для августа можно так:
Python
1
print(re.findall(r'август(?:а)?', t))
1
0 / 0 / 0
Регистрация: 14.10.2017
Сообщений: 14
26.03.2018, 13:30  [ТС]
blz, если проверять сразу несколько условий, то так можно написать m[i].append(re.findall(r'(\d{1,2})\s+(января |февраля|марта|апреля|мая|июня|июля|авгу ста|сентября|октября|ноября|декабря)\s+( \d{4})',str)or(re.findall(r'\d\d.\d\d.\d {4}', str)")) ?
0
 Аватар для blz
151 / 102 / 33
Регистрация: 11.08.2016
Сообщений: 574
26.03.2018, 13:44
Python
1
2
3
4
5
6
7
In [20]: a = 'они встречались с 01 января 1970 года по 31 февраля 1990 года, дата смерти: 14 ноябрь 2000'
In [21]: re_date = re.compile(r'(\d{1,2})\s+(?:январ(?:ь|я)|феврал(?:ь|я)|ноябр(?:ь|я))\s+(\d{4})', re.I)
In [22]: list(re_date.finditer(a))
Out[22]: 
[<_sre.SRE_Match object; span=(18, 32), match='01 января 1970'>,
 <_sre.SRE_Match object; span=(41, 56), match='31 февраля 1990'>,
 <_sre.SRE_Match object; span=(76, 90), match='14 ноябрь 2000'>]
Добавлено через 3 минуты
re.findall() or re.findall() – здесь это не нужно, да и вообще так не делают
0
0 / 0 / 0
Регистрация: 14.10.2017
Сообщений: 14
26.03.2018, 13:49  [ТС]
blz, как использовать несколько регулярных выражений?
0
 Аватар для blz
151 / 102 / 33
Регистрация: 11.08.2016
Сообщений: 574
26.03.2018, 14:05
(expr1|expr2|…exprN)

Python
1
2
3
4
5
6
7
8
In [31]: re_x = re.compile(r'\b(\d{4}|\w{3})\b')
In [32]: a= 'sdf 2344 swedfasdf 22 1999 555555 ttt ssssss'
In [33]: list(re_x.finditer(a))
Out[33]: 
[<_sre.SRE_Match object; span=(0, 3), match='sdf'>,
 <_sre.SRE_Match object; span=(4, 8), match='2344'>,
 <_sre.SRE_Match object; span=(22, 26), match='1999'>,
 <_sre.SRE_Match object; span=(34, 37), match='ttt'>]
в данном примере мы ищем слова из 3х букв или 4х цифр
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
26.03.2018, 14:47
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/env python3
import re
 
t = '''\
они встречались с 01 января 1970 года по 31 февраля 1990 года,
дата смерти: 14 ноябрь 2000
Встреча состоится 13.03.2037 или может быть
19.05.2017. Или нет.
'''
 
re_dates = [
    re.compile(r'(\d{1,2})\s+((?:январ(?:ь|я)|феврал(?:ь|я)|ноябр(?:ь|я)))\s+(\d{4})', re.I),
    re.compile(r'(\d{2}).(\d{2}).(\d{4})'),
]
 
ls = []
for r in re_dates:
    ls.extend(r.findall(t))
print(ls)
Добавлено через 6 минут
В первой регулярке что-то намудрили. (\d{1,2})\s+(январ(?:ь|я)|феврал(?:ь|я)|ноябр(?:ь|я))\s+(\d{4})
1
 Аватар для blz
151 / 102 / 33
Регистрация: 11.08.2016
Сообщений: 574
26.03.2018, 14:50
в регулярках-то и без ошибок? :-)
- \d{2}).(\d{2}).(\d{4})
+ \d{2})\.(\d{2})\.(\d{4})
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
26.03.2018, 14:52
Да, ещё и точки заэкранировать, а то будет строку "1201201994" принимать за дату.
0
 Аватар для blz
151 / 102 / 33
Регистрация: 11.08.2016
Сообщений: 574
26.03.2018, 14:54
а вообще, конечно, на практике может быть эффективнее не итерировать по регуляркам, а делать одну:
(<re_for_datefmt1>|<re_for_datefmt2>|…)

Добавлено через 1 минуту
хороший пример из жизни про парсинг дат разных форматов на питоне – fail2ban.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
26.03.2018, 15:00
Если у вас есть проблема, и вы собираетесь решать ее с использованием регулярных выражений, то у вас есть две проблемы.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/env python3
import re
 
t = '''\
они встречались с 01 января 1970 года по 31 февраля 1990 года,
дата смерти: 14 ноябрь 2000
Встреча состоится 13.03.2037 или может быть
19.05.2017. Или нет.
'''
 
re_date = re.compile(r'''
    (?:
        (\d{1,2})\s+(январ(?:ь|я)|феврал(?:ь|я)|ноябр(?:ь|я))\s+(\d{4})
        |
        ((\d{2})\.(\d{2})\.(\d{4}))
    )
    ''', re.I | re.X)
 
print(re_date.findall(t))
0
 Аватар для blz
151 / 102 / 33
Регистрация: 11.08.2016
Сообщений: 574
26.03.2018, 15:04
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
есть две проблемы
для ТС: перед тем, как втыкать регулярку в код, regexbuddy в помощь.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
26.03.2018, 20:11
Не по теме сабжа (к тому ж ТС не обозначил понятие что есть дата в его (кон)тексте).

После выделения токенов дат (регулярками или, к примеру, нейронной сетью) может возникнуть задача преобразования полученных сущностей в объекты python. Есть такой превосходный модуль как dateparser, который умеет преобразовывать множество токенов типа "дата" (самого широкого диапазона) в объект datetime. Поддерживает кучу языков (человеческих).
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import dateparser
 
dates = ['сегодня','завтра', 'вчера',
        'послезавтра',
        'позавчера',
        '1 час назад','2 часа назад',
        'через 3 часа',
        '20 минут назад',
        'сейчас',
        'через 3 секунды',
        '13 января 2018 г. в 13:34',
        '13 января',
        'январь 2017',
        'январь',
        '1 день назад',
        '02-03-2018', # parsing ambiguous date: uses MDY date order - можно задать другой порядок разбора
        '02/03/2018',
        '2018-02-03'
        ]
 
for date in dates:
    print('{:30}{}'.format(date,dateparser.parse(date)))
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
сегодня                       2018-03-26 20:00:15.350677
завтра                        2018-03-27 20:00:15.354677
вчера                         2018-03-25 20:00:15.356677
послезавтра                   2018-03-28 20:00:15.359677
позавчера                     2018-03-24 20:00:15.361677
1 час назад                   2018-03-26 19:00:15.364677
2 часа назад                  2018-03-26 18:00:15.366678
через 3 часа                  2018-03-26 23:00:15.369678
20 минут назад                2018-03-26 19:40:15.372678
сейчас                        2018-03-26 20:00:15.375678
через 3 секунды               2018-03-26 20:00:18.377678
13 января 2018 г. в 13:34     2018-01-13 13:34:00
13 января                     2018-01-13 00:00:00
январь 2017                   2017-01-26 00:00:00
январь                        2018-01-26 00:00:00
1 день назад                  2018-03-25 20:00:15.400680
02-03-2018                    2018-03-02 00:00:00
02/03/2018                    2018-03-02 00:00:00
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.03.2018, 20:11
Помогаю со студенческими работами здесь

В заданной строке текста найдите и выведите на экран все даты
В заданной строке текста найдите и выведите на экран все даты. Для даты можно указать свой или взять общепринятый формат, например,...

Составить программу, благодаря которой пользователь может выбрать размер шрифта текста из предложенного списка
Помогите пожалуйста))) Нужно составить программу, благодаря которой пользователь может выбрать размер шрифта текста из предложенного списка.

Выбрать все метки из текста программы
Помогите написать функцию на C# которая выбирает все метки из программы и заносит их в список или массив. На вход функция принимает строку....

Из текста выбрать все имена собственные
Из текста выбрать все имена собственные( слова, написанные с большой буквы в середине предложения) Помогите пожалуйста сделать ее!

Из текста выбрать все имена собственные
Народ подскажите как из теста выбрать все имена собственные (слова, написанные с большой буквы в середине текста).


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip . . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru