2013-11-18 4 views
-4

Во время моего кодаПолучить часть даты из строки

    doc2.LoadHtml(item.InnerHtml); 
        string detail1 = item.InnerHtml.Trim(); 
        string head1 = item.InnerText.Trim(); 

Я получаю строки в Head1 как этот

«товарная торговля Estimate для семян масличных культур, как на 20.10.2011 и доступности растительных масел» или «Товар & Вязание с апреля 2011 года» и т. д.

Теперь я хочу поместить только часть даты из этой строки, чтобы автоматически вставлять дату, связанную с этим сообщением, а не вручную. Дата часть в строке head1 может быть как ниже

>"______20.10.2011", 
>"______April, 2011"______, 
>"______Nov. 2008 to Oct. 2009", 
>"___2007-08 (Nov.-Oct.)______" 

Какой функцией или регулярное выражение, я использовал, чтобы получить только часть даты из строки ???

+3

Когда вы вниз голосования вопрос, просьба представить комментарии, так спрашивающий может узнать, как задавать вопросы уместнее (я не вниз проголосовали вопрос, так что я не более конкретный комментарий, чем этот). – BlueMonkMN

+0

что вы пробовали до сих пор на вашей стороне? вы также лучше напишите свое испробованное усилие (код), чтобы мы могли лучше рассказать о вашей ошибке. –

+0

Пожалуйста, сделайте свой вопрос четким и понятным. Хотите ли вы дату, т. Е. (_20 20 апреля 2013 года, 20-04-2013, 20.04.2013, 20/04/13_). В ваших вопросах для ввода, например ** апреля 2011 года **, невозможно извлечь часть даты –

ответ

0

Это будет извлекать, анализировать и распечатывать все даты ввода текста:

var regex = new Regex(@"\b\d{2}\.\d{2}.\d{4}\b"); 
foreach(Match m in regex.Matches(inputText)) 
{ 
    DateTime dt; 
    if (DateTime.TryParseExact(m.Value, "dd.MM.yyyy", null, DateTimeStyles.None, out dt)) 
     Console.WriteLine(dt.ToString()); 
} 

Теперь, если вы просто хотите, первое свидание, вы можете сделать это:

static DateTime? GetFirstDateFromString(string inputText) 
{ 
var regex = new Regex(@"\b\d{2}\.\d{2}.\d{4}\b"); 
foreach(Match m in regex.Matches(inputText)) 
{ 
    DateTime dt; 
    if (DateTime.TryParseExact(m.Value, "dd.MM.yyyy", null, DateTimeStyles.None, out dt)) 
     return dt; 
} 
return null; 
} 

Обратите внимание, что метод возвращает нулевое значение DateTime, так что он может возвращать значение null, когда строка не содержит даты.

+0

И ... 'Апрель, 2011'? –

+0

Аналогичным образом вы можете создать REGEX (регулярное выражение) для этого шаблона. –

+0

и вот что задается вопросом –

0

Предполагая, что вы имеете дело только с английским языком, что, если вы начали с этим списком строк:

January 
February 
March 
April 
May 
June 
July 
August 
September 
October 
November 
December 
Jan 
Feb 
Mar 
Apr 
May 
Jun 
Jul 
Aug 
Sep 
Sept 
Oct 
Nov 
Dec 
to 

И искали длинную подстроку, которая содержала только:

  1. Один из этих строк
  2. пунктуации
  3. Digits
  4. пространства

И предположим, что подстрока представляет дату?

Это RegEx. Просто выберите самый длинный матч, что он считает, что:

/\b(January|February|March|April|May|June|July|August|September|October|November|December|Jan|Feb|Mar|Apr|Jun|Jul|Aug|Sep|Sept|Oct|Nov|Dec|to|[^A-Za-z])+\b/gi 
Смежные вопросы