Regex 使用从正则表达式捕获的字符串格式化日期时间
我想做的是使用powershell解析文件,并用值替换文件中的某些关键字。这是工作,但我有一个问题,格式的日期时间使用捕获的正则表达式组。 文件im解析包含以下文本: $DATETIME$Regex 使用从正则表达式捕获的字符串格式化日期时间,regex,powershell,datetime,formatting,datetime-format,Regex,Powershell,Datetime,Formatting,Datetime Format,我想做的是使用powershell解析文件,并用值替换文件中的某些关键字。这是工作,但我有一个问题,格式的日期时间使用捕获的正则表达式组。 文件im解析包含以下文本: $DATETIME$ $DATETIME=yyyy-MM-ddTHH:MM:sszzz$ $DATETIME=yyyy$ 我有一个powershell脚本,它提取关键字DATETIME并捕获提供的格式。每当我尝试使用捕获的格式时,它都会失败,因为(我怀疑)捕获的字符串变量$1被用作格式字符串,而不是$1的值 Get-Content
$DATETIME=yyyy-MM-ddTHH:MM:sszzz$
$DATETIME=yyyy$ 我有一个powershell脚本,它提取关键字DATETIME并捕获提供的格式。每当我尝试使用捕获的格式时,它都会失败,因为(我怀疑)捕获的字符串变量$1被用作格式字符串,而不是$1的值
Get-Content $inputfile) `
-replace '\$DATETIME[=]?(.*)\$', $(Get-Date -Format '$1') `
| Set-Content $outputfile
如果有人能帮忙,我将不胜感激。谢谢您需要将匹配值传递到回调方法中,或者像这样使用它
PS> $s = '$DATETIME=yyyy-MM-ddTHH:mm:sszzz$'
PS> [regex]::Replace($s,'\$DATETIME=?([^$]*)\$', {param($match) $(Get-Date -Format $match.Groups[1].Value) })
DATETI6E=2018-06-29T15:09:30+02:00
原始解决方案中的'$1'
作为文本$1
字符串传递给Get Date
,因此无法按预期工作。这些替换反向引用只能在字符串替换模式中使用,但不能在匹配需要进一步操作时使用
请注意,我稍微修改了模式以匹配:
-a\$
字符$
-文字子字符串DATETIME
-1或0=?
字符=
-第1组(此处捕获的值将用于生成日期时间字符串):除([^$]*)
之外的任何0+字符(如果一行上有超过1个匹配项,它仍然有效,并且匹配速度将快于贪婪(甚至懒惰)点模式)$
-a\$
字符$
$match.Groups[1]
而不是$match.value
@NahuelFouilleul True,抱歉,修复了。谢谢Wiktor。工作起来很有魅力!有没有一种方法可以通过'-replace'方法实现这一点?@Reznoir没有,因为它只需要字符串替换模式。