使用从正则表达式捕获的字符串来格式化日期时间
Use a string captured from regex to format a datetime
我想做的是使用powershell 解析一个文件并用值替换文件中的某些关键字。这是有效的,但我在使用捕获的正则表达式组格式化日期时间时遇到问题。
我正在解析的文件包含以下文本:
$DATETIME$
$DATETIME=yyyy-MM-ddTHH:mm:sszzz$
$DATETIME=yyyy$
我有一个 powershell 脚本可以提取关键字 DATETIME 并捕获提供的格式。每当我尝试使用捕获的格式时,它都会失败,因为(我怀疑)捕获的字符串变量 $1 用作格式字符串而不是 $1 的值。
Get-Content $inputfile) `
-replace '$DATETIME[=]?(.*)$', $(Get-Date -Format '') `
| 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
原始解决方案中的 ''
作为文字 </code> 字符串传递给 <code>Get-Date
,因此未按预期工作。这些替换反向引用只能用于字符串替换模式,但不能在匹配需要进一步操作时使用。
请注意,我稍微修改了模式以匹配:
$
- 一个 $
字符
DATETIME
- 文字子串
=?
- 1 或 0 个 =
个字符
([^$]*)
- 第 1 组(此处捕获的值将用于生成日期时间字符串):除 $
之外的任何 0+ 个字符(如果单个匹配项超过 1 个)行,它仍然可以工作,并且比贪婪(甚至惰性)点模式匹配得更快)
$
- 一个 $
字符
我想做的是使用powershell 解析一个文件并用值替换文件中的某些关键字。这是有效的,但我在使用捕获的正则表达式组格式化日期时间时遇到问题。 我正在解析的文件包含以下文本:
$DATETIME$
$DATETIME=yyyy-MM-ddTHH:mm:sszzz$
$DATETIME=yyyy$
我有一个 powershell 脚本可以提取关键字 DATETIME 并捕获提供的格式。每当我尝试使用捕获的格式时,它都会失败,因为(我怀疑)捕获的字符串变量 $1 用作格式字符串而不是 $1 的值。
Get-Content $inputfile) `
-replace '$DATETIME[=]?(.*)$', $(Get-Date -Format '') `
| 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
原始解决方案中的 ''
作为文字 </code> 字符串传递给 <code>Get-Date
,因此未按预期工作。这些替换反向引用只能用于字符串替换模式,但不能在匹配需要进一步操作时使用。
请注意,我稍微修改了模式以匹配:
$
- 一个$
字符DATETIME
- 文字子串=?
- 1 或 0 个=
个字符([^$]*)
- 第 1 组(此处捕获的值将用于生成日期时间字符串):除$
之外的任何 0+ 个字符(如果单个匹配项超过 1 个)行,它仍然可以工作,并且比贪婪(甚至惰性)点模式匹配得更快)$
- 一个$
字符