Tengo un campo, description que contiene texto en un formato predecible, que se parece a cualquiera de estas 2 opciones,

DEACTIVATED on Tue Apr 02 2019

O

DEACTIVATED on Tue Apr 02 2019 | MANAGER John Smith

Necesito tomar solo la fecha en cada caso, Tue Apr 02 2019, al tiempo que considero que hay o no texto después de la fecha.

Ejemplo de caso de uso

$string = "DEACTIVATED on Tue Apr 02 2019 | MANAGER John Smith"
$date   = "Tue Apr 02 2019"
-1
vin_Bin87 9 may. 2019 a las 16:35

3 respuestas

La mejor respuesta

Así es como lo obtuve, ya que tuve que tener en cuenta algunas diferencias potenciales entre objetos

$text = "DEACTIVATED on Tue Apr 02 2019 | MANAGER John Smith"
$start_pos = $text.IndexOf('on')

$substring = $text.substring($start_pos + 3)

if ($text.IndexOf(' | ') -gt -1) {
    $end_pos = $text.indexOf(' | ')
    $substring = $substring.substring(0, $end_pos)
}
0
vin_Bin87 9 may. 2019 a las 13:59

Yo usaría:


## Q:\Test\2019\05\09\SO_56060672.ps1

$strings = @"
DEACTIVATED on Tue Apr 02 2019

DEACTIVATED on Tue Apr 09 2019 | MANAGER John Smith
"@ -split '\r?\n'

$RE = '(?<=DEACTIVATED on ).*\d{4}'

## Output found datetime strings
$strings | Select-String $RE | ForEach-Object{$_.Matches.value}

## if your locale is English convert to [datetime] type
$strings | Select-String $RE | ForEach-Object{
    [datetime]::ParseExact($_.Matches.value,'ddd MMM dd yyyy',$null)
}

## if your locale is NOT English convert to [datetime] type
$strings | Select-String $RE | ForEach-Object{
    [datetime]::ParseExact($_.Matches.value,'ddd MMM dd yyyy',
       [System.Globalization.CultureInfo]::InvariantCulture)
}

Salida de la primera y última en mi configuración regional alemana:

Tue Apr 02 2019
Tue Apr 09 2019

Dienstag, 2. April 2019 00:00:00
Dienstag, 9. April 2019 00:00:00
0
user6811411user6811411 9 may. 2019 a las 14:49

No estoy seguro si entendí correctamente pero la subcadena funciona así:

$string = "DEACTIVATED on Tue Apr 02 2019 | MANAGER John Smith"
#.substring(starting point, how many)
$date = $string.Substring(15,10)
$date
Tue Apr 02
0
coder9001 9 may. 2019 a las 13:52