Регулярное выражение для извлечения значения даты, указанного в слове из строки в Java - PullRequest
1 голос
/ 11 сентября 2011

У меня есть столбец Дата, который содержит следующие значения образца

  • Опубликовано 25 июня 2010 г. в 13:01
  • 14 марта 2011 г.
  • Пятница, 15 апреля 2011 года 00:15
  • Четверг, 31 марта 2011 г. , 13:11 * 10101
  • Обновлено: 9:34, пятница 3 июня 2011 г. .

Я хочу извлечь даты (выделены жирным шрифтом) в заданной строке. Могу ли я получить регулярное выражение, которое обнаружит эту дату, указанную в словах.

Спасибо !!

Ответы [ 3 ]

2 голосов
/ 11 сентября 2011

Не изобретайте заново, существует множество программ, которые делают то, что вы хотите, так как это довольно распространенная проблема.Попробуйте прочитать это http://javatechniques.com/blog/dateformat-and-simpledateformat-examples/ или просто немного поработать над серфингом, и вы найдете много!

2 голосов
/ 11 сентября 2011

Я думаю, это зависит от того, насколько строгим должно быть выражение.Этот будет работать для всех ваших примеров:

/(January|February|March|April|May|June?|July|August|September|October|November|December)\s(\d\d?).+?(\d\d\d\d)/

Но нет никакого применения st , и , rd , th правила.

Также нет запятой на запятой, отделяющей день от года.

И есть особый случай для сокращенного июня(для вашего примера 5 есть необязательный e для июня), но для других сокращенных названий месяцев не учитывается.

Пример вывода из Firebug:

>>> /(January|February|March|April|May|June?|July|August|September|October|November|December)\s(\d\d?).+?(\d\d\d\d)/.exec(s1)
["June 25, 2010", "June", "25", "2010"]
>>> /(January|February|March|April|May|June?|July|August|September|October|November|December)\s(\d\d?).+?(\d\d\d\d)/.exec(s2)
["March 14, 2011", "March", "14", "2011"]
>>> /(January|February|March|April|May|June?|July|August|September|October|November|December)\s(\d\d?).+?(\d\d\d\d)/.exec(s3)
["April 15, 2011", "April", "15", "2011"]
>>> /(January|February|March|April|May|June?|July|August|September|October|November|December)\s(\d\d?).+?(\d\d\d\d)/.exec(s4)
["March 31st, 2011", "March", "31", "2011"]
>>> /(January|February|March|April|May|June?|July|August|September|October|November|December)\s(\d\d?).+?(\d\d\d\d)/.exec(s5)
["Jun 3, 2011", "Jun", "3", "2011"]
1 голос
/ 11 сентября 2011
/\w+\s\d+(st)?(nd)?(rd)?(th)?,\s+\d+/

Более полное регулярное выражение для принятия форм, которые могут не соответствовать точно введенному месяцу, но соответствовать форме "Месяц день (необязательный суффикс), год

Обратите внимание, что у вас может быть что-то похожее на:

Blah 45rd, 2022222

И это все равно поймает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...