我正在尝试替换一系列字符串以提取日期。我使用的是Powershell,并提供了部分示例以供参考:
$Strings = @("this_is_a_test_8_20_2019_test", "this_is_a_test_8_19_2019_test")
$Strings -replace "[^0-9_]",""
留下结果:
____ 8_20_2019 _
____ 8_19_2019 _
我试图仅隔离不跟在另一个_后面的_字符,然后隔离数字。我感觉好像缺少了非常明显的东西,但是我不确定。任何人有任何想法/建议吗?
答案 0 :(得分:1)
假设您期望:
8_20_2019
8_19_2019
那么您需要:
$Strings -replace "[^\d]+_|_[^\d]+",""
答案 1 :(得分:1)
一个选项可能是匹配1+倍而不是数字\D+
,并使用正向查找(?=
断言直接在右边的是下划线或字符串{{1 }}
在替换中,使用一个空字符串。
$
\D+(?:_|$)
结果
$Strings = @("this_is_a_test_8_20_2019_test", this_is_a_test_8_19_2019_test")
$Strings -replace "\D+(?:_|$)",""
答案 2 :(得分:0)
假设您说的是要说的日期(而不只是数字字符串)时是要说的,那么这个otta就可以完成工作。 [咧嘴]
它做什么...
::ParseExact()
将日期 string 转换为日期时间 object 代码...
$InStuff = @(
"this_is_a_test_8_20_2019_test"
"this_is_a_test_10_9_2001_test"
'test_with_two_digits_12_12_2012_gobbledegook'
'single_digit_test_1_2_1999_arglebargle'
)
foreach ($IS_Item in $InStuff)
{
$DateString = $IS_Item -replace '^.+_(\d{1,2}_\d{1,2}_\d{4})_.+$', '$1'
[datetime]::ParseExact($DateString, 'M_d_yyyy', $Null)
}
输出...
2019 August 20, Tuesday 12:00:00 AM
2001 October 09, Tuesday 12:00:00 AM
2012 December 12, Wednesday 12:00:00 AM
1999 January 02, Saturday 12:00:00 AM