Primo Chalice Ответов: 4

Как извлечь число из строки и разобрать его как дату?


- Привет!

У меня есть файл, который называется как uk_mcn_20190201_feed.xml Дело в том, что он находится в формате yyyyMMdd и может быть записан в любом месте имени файла. Я имею в виду что-то вроде:

uk_20190201_mcn_feed.xml

20190201_uk_mcn_feed.xml

uk_mcn_feed_20190201.xml

Я хочу извлечь число из имени файла, проанализировать его как yyyyMMdd и записать его как dd-mm-yyyy в моем XML-файле.

У меня есть имя файла, но я не знаю, как извлечь цифры.

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

Пожалуйста помочь.

С уважением
Аман

Что я уже пробовал:

var mat = Regex.Match(stringValue, @"\d+").Value; //I have just done the extraction

4 Ответов

Рейтинг:
2

Maciej Los

Другой способ-удалить нецифровые символы. Видеть:

System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.InvariantCulture;
string[] files = {"uk_mcn_20190201_feed.xml",
	"uk_20190202_mcn_feed.xml",
	"20190203_uk_mcn_feed.xml",
	"uk_mcn_feed_20190204.xml"};
	
var filesAndDates =  files
	.Select(x=> new 
		{
			FileName = x,
			Date = DateTime.ParseExact(Regex.Replace(x, @"\D", ""), "yyyyMMdd", ci) //here non-digits are replaced with empty string
		})
	.ToList();
	
foreach(var fad in filesAndDates)
{
	Console.WriteLine("{0}\t{1}", fad.FileName, fad.Date);
}


Рейтинг:
2

Patrice T

Всего лишь несколько интересных ссылок, которые помогут построить и отладить регулярное выражение.
Вот ссылка на документацию по регулярным выражениям:
perlre - perldoc.perl.org[^]
Вот ссылки на инструменты, помогающие создавать регулярные выражения и отлаживать их:
.Объем тестер регулярное выражение - регулярное выражение шторм[^]
Регулярное Средство Выражения Эспрессо [^]
RegExr: Learn, Build, & Test RegEx[^]
Онлайн-тестер регулярных выражений и отладчик: PHP, PCRE, Python, Golang и JavaScript[^]
Этот пример показывает вам регулярное выражение в виде красивого графика, который действительно полезен для понимания того, что делает регулярное выражение: Debuggex: онлайн-тестер визуальных регулярных выражений. JavaScript, Python и PCRE.[^]
Этот сайт также показывает регулярное выражение в красивом графике, но не может проверить, что соответствует регулярному выражению: Regexper[^]


Рейтинг:
1

Richard MacCutchan

Как только у вас есть номер, вы можете использовать его значение datetime.Метод TryParse (Система) | Microsoft Docs[^]. Немного больше гуглить с вашей стороны будет платить дивиденды.


Рейтинг:
0

OriginalGriff

Регулярное выражение для восьмизначной последовательности очень просто:

\d{8}

Для того чтобы конвертировать в datetime, тоже простой:
DateTime dt;
if (!DateTime.TryParseExact(yourStringBasedDate, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
    {
    // report problem or log it
    return;
    }
Затем вы можете отформатировать значение DateTime по своему усмотрению (или лучше оставить его генератору XML)