2016-08-09 2 views
0

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

На данный момент я сделал следующий код, чтобы сделать это для нас:

$temp = ($Mail.Body.Text -creplace '(?m)^\s*\r?\n' -split "User name`r`n`tLogon name`r`n`tEnd date`r`n`tNew end date")[1] 
(($temp -split "`r`n`t")[3] -split "`r`n")[0] 

Как вы можете видеть, это довольно долго и очень полагаясь на -split. Есть ли более простой способ получить дату? С Select-String или Regex что ли?

Формат таблицы в электронном письме всегда совпадает, так как пользователям необходимо заполнить дату в таблице HTML. Поэтому нам нужно уметь читать эту таблицу. В приведенном ниже примере результатом будет 01/08/2016.

Пример такой электронной почты:

Date added below 



From: GBR Service Desk 
Sent: Wendesday 29 juni 2016 7:00 
To: Bond, James (London) GBR 
Subject: REMINDER Expiring user: 
Importance: High 



Dear James 

This is a reminder e-mail to inform you that the following Windows user account will expire soon: 

User name 

    Logon name 

    End date 

    New end date 


Smith, Jobn (Manchester) GBR 

    jent 

    01/07/2016 

    01/08/2016 



Because you are registered as the manager of this user, we would like to ask you to verify if this account is still nee 
ded after its end date. More text... 

Yours sincerely 

Спасибо за вашу помощь.

ответ

2

Вы можете использовать Select-String для поиска шаблонов даты, как и выбрать последний:

$EndDate = ($Mail.Body.Text |Select-String '\d{2}/\d{2}/\d{4}' -AllMatches).Matches[-1].Value 
+0

Это действительно отличный совет! Спасибо, Матиас :) Но иногда они что-то там набирают, например, «8 августа». В этом случае мне нужно это сделать. – DarkLite1

+0

@ DarkLite1: И сколько форматов/человеческих языков вы собираетесь поддерживать? Добавьте это в вопрос. –

+0

Я согласен, отмечая это как решение. – DarkLite1

Смежные вопросы