gpt4 book ai didi

regex - 使用从正则表达式捕获的字符串来格式化日期时间

转载 作者:行者123 更新时间:2023-12-01 11:16:03 25 4
gpt4 key购买 nike

我想做的是使用 powershell 解析文件并用值替换文件中的某些关键字。这是有效的,但我在使用捕获的正则表达式组格式化日期时间时遇到问题。我正在解析的文件包含以下文本:

$DATETIME$
$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,因此未按预期工作.这些替换反向引用只能用于字符串替换模式,但不能在匹配需要进一步操作时使用。

请注意,我稍微修改了模式以匹配:

  • \$ - $ 字符
  • DATETIME - 文字子串
  • =? - 1 或 0 个 = 字符
  • ([^$]*) - 第 1 组(此处捕获的值将用于生成日期时间字符串):$ 以外的任何 0+ 个字符(如果一行中有超过 1 个匹配项,它仍然有效,并且比贪婪(甚至懒惰)点模式匹配得更快)
  • \$ - $ 字符

关于regex - 使用从正则表达式捕获的字符串来格式化日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51102248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com