我有包含以下内容的 file.txt:
34455
55676
66677
6888868,
6688886
n\
n\
我怎样才能检索 5 到 7 之间的数字,而不包含任何字符或空格?预期输出如下:
34455
55676
66677
6888868
6688886
答案1
只需读取文件并获取数字匹配,使用 Get-Content 使用 -replace 开关使用正则表达式获取数据。你想要的是常见的字符串替换。
# https://wisetut.com/only-numbers-in-regex-regular-expression/
(Get-Content -Path 'D:\Scripts\MyNumbersFile.txt') -match '\d'
阅读有关 PS 文件管理的内容:
更新-试试这个:
(Get-Content -Path 'D:\Scripts\MyNumbersFile.txt') -match '\d' -replace '\s*' -replace ','
更新-其他想法
Clear-Host
('
34455
55676
66677
6888868,
6688886
n\
n\
' | ConvertFrom-Csv -Header MyNumber) -match '\d'
# Results
<#
MyNumber
--------
34455
55676
66677
6888868
6688886
#>
(Get-Content -Path 'D:\Scripts\MyNumbersFile.txt' |
ConvertFrom-Csv -Header MyNumber) -match '\d'
# Results
<#
MyNumber
--------
34455
55676
66677
6888868
6688886
#>
根据您和我的最后一条评论进行进一步更新。 使用 .Net RegEx 组匹配和使用 Get-Content 时使用 -Raw
# This...
[RegEx]::Matches((Get-Content -Path 'D:\Scripts\MyNumbersFile.txt'), '\d{5,7}').Value
# Or this...
[RegEx]::Matches((Get-Content -Path 'D:\Scripts\MyNumbersFile.txt' -Raw), '\d{5,7}').Value
# The end results are the same either way
<#
34455
55676
66677
6888868
6688886
#>
答案2
请尝试以下操作:
(Get-Content -Path 'C:\Path\to your\file.txt') -replace "\D","" -replace "^\d{1,3}$","" -replace "^\d{8,}","" -match "\S"