我有以下脚本:
[string]$dnisList = @"
22222222n
11111111j
"@
[string]$dnis = $dnisList.split('`n').trim().ToUpper() | Select-String "(\d{8})([A-Z])" -AllMatches | ForEach {$_.Matches.value}
$dnis
output:
11111111j
output expected without modifying the list:
22222222n
11111111j
因为它没有取第一个字符串,是因为它用 n 换行了吗?我该怎么做才能让它在不修改列表的情况下取它?
答案1
因为你使用了单引号,
.Split('`n')
被读作“在反引号或‘n’上拆分”---因此,中的‘n’22222222n
被你的“吃掉”了.Split()
:
PS > [string]$dnisList = @"
>>
>> 22222222n
>> 11111111j
>>
>> "@
>>
>> $dnisList.split('`n')
22222222
11111111j
PS >
并且没有尾随字母,第一个字符串永远不会匹配 中的正则表达式Select-String
。请注意,上面<NewLine>
仍然存在(作为第二个字符串中的第一个字符)---但这并不明显,因为它被 吃掉了.Trim()
:
PS > $dnisList.split('`n').Trim()
22222222
11111111j
PS >
反引号转义序列需要双引号:
PS > $dnisList.split("`n").trim().ToUpper()
22222222N
11111111J
PS >
进而:
PS > $dnisList.split("`n").trim().ToUpper().ToUpper() | Select-String "(\d{8})([A-Z])" -AllMatches | ForEach {$_.Matches.value}
22222222N
11111111J
PS >