this is the code i want to convert to the"powershell way":
private static Regex unit = new Regex(
@"(?<sequence>\d+)\r\n(?<start>\d{2}\:\d{2}\:\d{2},\d{3}) --\> (?<end>\d{2}\:\d{2}\:\d{2},\d{3})\r\n(?<text>[\s\S]*?\r\n\r\n)",
RegexOptions.Compiled | RegexOptions.ECMAScript);
output.Write(
unit.Replace(input.ReadToEnd(), delegate(Match m)
{
return m.Value.Replace(
String.Format("{0}\r\n{1} --> {2}\r\n",
m.Groups["sequence"].Value,
m.Groups["start" ].Value,
m.Groups["end" ].Value),
String.Format(
"{0}\r\n{1:HH\\:mm\\:ss\\,fff} --> " +
"{2:HH\\:mm\\:ss\\,fff}\r\n",informatifetcourrier.com CuImE
sequence++,
DateTime.Parse(m.Groups["start"].Value.Replace(",","."))
.AddSeconds(offset),
DateTime.Parse(m.Groups["end" ].Value.Replace(",","."))
.AddSeconds(offset)));
And my attempt:
$text=@'
2
00:00:03,601 --> 00:00:06,603
<i>Vous devrez trouver quelqu'un
qui pense différemment pour l'attraper.</i>
'@
$regex ='(?m)(?<sequence>\d+)\r\n(?<start>\d{2}\:\d{2}\:\d{2},\d{3}) --\> (?<end>\d{2}\:\d{2}\:\d{2},\d{3})\r\n(?<text>[\s\S]*?\r\n\r\n)'
$r = New-Object System.Text.RegularExpressions.Regex $regex
$MatchEvaluator =
{
param($m)
$m.value.replace([string]::Format("{0}\r\n{1} --> {2}\r\n",
$m.Groups["sequence"].Value,
$m.Groups["start" ].Value,
$m.Groups["end" ].Value),
[string]::Format("{0}\r\n{1:HH\\:mm\\:ss\\,fff} --> {2:HH\\:mm\\:ss\\,fff}\r\n",
[datetime]::Parse($m.Groups["start"].Value.Replace(",",".")).AddSeconds(1),
[datetime]::Parse($m.Groups["end" ].Value.Replace(",",".")).AddSeconds(1)))
}
$result = $r.Replace($text, $MatchEvaluator)
but it doesn't work. Thank you for your help.
I know i have to use scriptblock-delegate in order to aim my purpose.
$regex ='(?m)(?<sequence>\d+)$\s*(?<start>\d{2}:\d{2}:\d{2},\d{3}) --> (?<end>\d{2}:\d{2}:\d{2},\d{3})$\s*(?<text>.*$\s*.*$)'