首页 > 解决方案 > 有没有办法将 2 天添加到日期字符串并使用结果更新另一个字段?

问题描述

我有一个包含记录的大文件,其中每条记录中的日期字符串需要增加 2 天,然后更新它右侧的字段,其中包含带有该日期的破折号“-----”。例如,一条记录包含以下记录数据:

 1440149049845_20191121000000 11/22/2019 **--------** 0.000 0.013

我想用 2019 年 11 月 24 日(2019 年 11 月 22 日的日期增加 2 天)替换 '--------' 破折号,使其显示为:

 1440149049845_20191121000000 11/22/2019 **11/24/2019** 0.000 0.013

此外,我需要将包含0.000的字段替换为 0.412,以便整个更新的记录呈现如下:

 1440149049845_20191121000000 11/22/2019 **11/24/2019** **0.412** 0.013

这可以在 PowerShell 中编码吗?

标签: powershell

解决方案


答案是肯定的。您可以执行类似于以下的操作:

$a = '1440149049845_20191121000000 11/22/2019 **--------** 0.000 0.013'
$null = $a -match '\d{2}/\d{2}/\d{4}' 
$a -replace '-{2,}',([datetime]$matches.0).adddays(2).tostring('MM/dd/yyyy') -replace '\b0\.000\b','0.412'

解释:

-match使用正则表达式对字符串进行模式匹配。成功的匹配存储在自动变量$Matches中。$Matches是每个捕获组的键值对的哈希表。每个捕获的值可以通过名称通过点引用访问。由于我们没有指定捕获组名称并且只使用默认组,$Matches.0因此检索匹配值。

\d{2}/\d{2}/\d{4}'是匹配日期模式的正则表达式模式MM/dd/yyyy。可以从 中检索匹配项$Matches.0

使用[datetime]加速器,日期字符串被转换为日期时间对象,我们可以在其中访问该AddDays()方法。

\b0\.000\b是另一种不匹配0.000任何其他相邻字母或数字的正则表达式模式。请注意.必须如何转义\才能成为文字,因为.在正则表达式中具有特殊含义。

有时将多个运算符串在一起更容易。这就是拥有多个-replace运营商的目的。每个输出都被馈送到下一个运算符。


推荐阅读