首页 > 解决方案 > 在powershell中匹配浮点数

问题描述

我很难用 PowerShell 匹配 HTML 字符串。最后两个td元素有一个整数(1)和一个浮点数(11,793)。数字73480永远不会改变。这个数字(1 和 11,793)可以切换它们的类型(整数<=>浮动)。当我[+-]?([0-9]*[.])?[0-9]+在这种情况下使用时,代码不起作用。知道如何解决吗?

$web = @"
  <tr bgcolor=#fbf6e9>
    <td align="center">73480    </td>
    <td align="left">Сазлийка    </td>
    <td align="left">Гълъбово    </td>
    <td align="right">1    </td>
    <td align="right">11,793    </td>
  </tr>
"@
[regex]::Match($web,@"
  <tr bgcolor=#fbf6e9>
    <td align="center">73480    </td>
    <td align="left">(\w+)    </td>
    <td align="left">(\w+)    </td>
    <td align="right">([+-]?([0-9]*[.])?[0-9]+)    </td>
    <td align="right">([+-]?([0-9]*[.])?[0-9]+)    </td>
  </tr>
"@).Groups[1,2,3,4].Value

执行命令后没有输出(空白结果)。

标签: regexpowershell

解决方案


您的文本有一个小数逗号,但您的正则表达式尝试匹配一个[.].
我还将用\s*
您选择的组不计算捕获第一部分的可选子(组)替换正则表达式中的所有多个空格。

$web = @"
  <tr bgcolor=#fbf6e9>
    <td align="center">73480    </td>
    <td align="left">SampleOne    </td>
    <td align="left">SampleTwo    </td>
    <td align="right">1    </td>
    <td align="right">11,793    </td>
  </tr>
"@

$RE = @"
\s*<tr bgcolor=#fbf6e9>
\s*<td align="center">73480\s*</td>
\s*<td align="left">(\w+)\s*</td>
\s*<td align="left">(\w+)\s*</td>
\s*<td align="right">([+-]?([0-9]*[,\.])?[0-9]+)\s*</td>
\s*<td align="right">([+-]?([0-9]*[,\.])?[0-9]+)\s*</td>
\s*</tr>
"@
[regex]::Match($web,$RE).Groups[1,2,3,5].Value

在这里返回:

SampleOne
SampleTwo
1
11,793

推荐阅读