regex - 在 PowerShell 中组合两个正则表达式

标签 regex powershell parsing select-string

这是我要解析的数据:

10.186.128.0/20 172.17.128.161 0 65000 8788

10.186.128.0/20 172.17.128.161 0 65000 878

10.186.128.0/20 172.17.128.161 0 65000 87

理想情况下,输出应与行开头的 IP 地址以及最后 2、3 或 4 位数字匹配。 所需输出示例:

10.186.128.0/20 8788

10.186.128.0/20878

10.186.128.0/20 87

我有与 IP 地址匹配的正则表达式“10\.\d*\.\d*\.\d*\/\d\d”

然后我有第二个正则表达式,它将匹配最后 2 或 3 或 4 位数字 "\d{4}$|\d{3}$|\d{2}$"

问题是如何在 PowerShell 中组合这两个正则表达式以获得所需的结果?

谢谢

最佳答案

您可以使用

Get-Content $filepath | Select-String '^(10(?:\.\d+){3}/\d+)\s.*\s(\d+)$' -AllMatches | Foreach-Object {$_.Matches} | Foreach-Object {$_.Groups[1].Value + " " + $_.Groups[2].Value}

^(10(?:\.\d+){3}/\d+)\s.*\s(\d+)$ 正则表达式 - 请参阅 its online demo - 匹配:

  • ^ - 字符串开头
  • (10(?:\.\d+){3}/\d+) - 第 1 组:10,然后重复 3 次一个点和任意 1+数字,然后是 / 和 1+ 数字
  • \s.*\s - 一个空格、除换行符之外的任何 0 个以上字符(尽可能多)和一个空格
  • (\d+) - 第 2 组:1+ 位数字
  • $ - 字符串结尾。

所以,

  • Get-Content $filepath 读取文件
  • Select-String '^(10(?:\.\d+){3}/\d+)\s.*\s(\d+)$' -AllMatches 获取所有匹配项逐行读取文件得到的文件
  • Foreach-Object {$_.Matches} 逐一抓取所有匹配项
  • Foreach-Object {$_.Groups[1].Value + ""+ $_.Groups[2].Value} 连接第 1 组和第 2 组值。

关于regex - 在 PowerShell 中组合两个正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59052465/

相关文章:

c++ - 在 C++ 中使用正则表达式读取空格、新行和制表符

regex - 如何在不知道正则表达式匹配的情况下使用正则表达式提取子字符串(组)?

powershell - 如何从powershell中的一行获取特定值

android - 在 Android 12 上安装 Flutter 应用发布版本时出错 : "Parse Error : There was a problem parsing the package"

java - 将 var^power 替换为 pow(var,power)

c# - 使用带有 Regex 的 Linq 删除空匹配项

python - Python 有类似于 PowerShell 的通配符吗?

c# - 如何验证Azure虚拟机用户名和密码?

c++ - 使用 istream 迭代器时解析失败

javascript - 解析大型 JSON 失败