gpt4 book ai didi

regex - 如何在文件中查找所有正则表达式匹配项

转载 作者:行者123 更新时间:2023-12-02 23:29:19 25 4
gpt4 key购买 nike

我有一个正则表达式列表(大约 2000 个)和超过一百万个 html 文件。我想检查每个文件的每个正则表达式是否成功。如何在powershell上做到这一点?

性能很重要,所以我不想遍历正则表达式。

我试试

$text | Select-String -Pattern pattern1, pattern2,...

它返回所有匹配项,但我也想找出哪个模式成功哪个不成功。我需要为每个文件构建一个成功的正则表达式列表

最佳答案

你可以尝试这样的事情:

$regex = "^test","e2$"  #Or use (Get-Content <path to your regex file>)
$ht = @{}

#Modify Get-Childitem to your criterias(filter, path, recurse etc.)
Get-ChildItem -Filter *.txt | Select-String -Pattern $regex | ForEach-Object {
$ht[$_.Path] += @($_ | Select-Object -ExpandProperty Pattern)
}

测试输出:
$ht | Format-Table -AutoSize

Name Value
---- -----
C:\Users\graimer\Desktop\New Text Document (2).txt {e2$}
C:\Users\graimer\Desktop\New Text Document.txt {^test, e2$}

您没有指定您想要的输出方式。

更新:要在一行上匹配多个模式,试试这个(mjolinor 的答案可能比这个更快)。
$regex = "^test","e2$"  #Or use (Get-Content <path to your regex file>)
$ht = @{}

#Modify Get-Childitem to your criterias(filter, path, recurse etc.)
$regex | ForEach-Object {
$pattern = $_
Get-ChildItem -Filter *.txt | Select-String -Pattern $pattern | ForEach-Object {
$ht[$_.Path] += @($_ | Select-Object -ExpandProperty Pattern)
}
}

UPDATE2:我没有足够的样本来尝试它,但是由于您有如此大量的文件,您可能想在循环模式之前尝试将文件读入内存。它可能会更快。
$regex = "^test","e2$"  #Or use (Get-Content <path to your regex file>)
$ht = @{}

#Modify Get-Childitem to your criterias(filter, path, recurse etc.)
Get-ChildItem -Filter *.txt | ForEach-Object {
$text = $_ | Get-Content
$filename = $_.FullName
$regex | ForEach-Object {
$text | Select-String -Pattern $_ | ForEach-Object {
$ht[$filename] += @($_ | Select-Object -ExpandProperty Pattern)
}
}
}

关于regex - 如何在文件中查找所有正则表达式匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20030051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com