【问题标题】:How do I capture a value using Select-String and regex matching in PowerShell?如何在 PowerShell 中使用 Select-String 和正则表达式匹配来捕获值?
【发布时间】:2016-09-01 00:23:24
【问题描述】:

我正在尝试使用Select-String 从正则表达式匹配中访问捕获。这是文本的示例。

'dataarea' - closed, 10,933 rows are stored

我想获取行数 (10,933)。

PS> Select-String -Path $foo -Pattern 'closed,\s\d+[.,\d.*]{1,}' `
    | %{ $_.Matches } `
    | %{ $_.Value } > $output

我尝试了不同的正则表达式,但不知道如何仅捕获数字。这也捕获了打开模式closed

【问题讨论】:

  • 你有什么问题?正则表达式还是什么?
  • 我希望能够捕获 10,933 但不能
  • 使用正则表达式,您通常必须在数据中查找模式,以便知道如何包含您想要的行并排除您不想要的行。您无法用一个数据点建立模式。
  • 是,但我不能匹配 -close, ([0-9]+)
  • 也许吧,但如果您是唯一知道其余数据是什么样子的人,那么您就是唯一知道答案的人。你让其他人不得不玩猜谜游戏来尝试为你想出一个解决方案。

标签: regex powershell


【解决方案1】:

这是另一种可能性:

'(?<=closed.*)[0-9,]+'

到目前为止,不能保证逗号会一直存在,或者永远只有一个。

【讨论】:

    【解决方案2】:

    这适用于有或没有昏迷来分隔 1000 的:

    $regex = '\d+[,|]+\d+'
    

    【讨论】:

    • 只有在之前有closed 时才捕获\d+,\d+。这就是我理解的 OP 的要求,但是......谁知道 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 2023-03-15
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多