因为它没有列出小写的 n

因为它没有列出小写的 n

我有以下脚本:

[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 >

相关内容