regex - 在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
执行命令后没有输出(空白结果)。
解决方案
您的文本有一个小数逗号,但您的正则表达式尝试匹配一个[.]
.
我还将用\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
推荐阅读
- c# - 如何获取 DataGridTemplateColumn 的底层(文本框)控件
- regex - 将给定的字符串评估为数组或不使用正则表达式
- c# - 当创建另一个类的对象时,foreach 循环崩溃
- javascript - 用于反应导航的主屏幕(App.js)结构
- c# - 在哪里可以找到 NuGet.Clients 文档?
- node.js - Graphql自定义标量,没有为空值调用parseLiteral?
- http - 不同客户端的 iTunes Lookup API 响应不同
- python - 缺少值时将列值添加到另一列中的数组中
- wordpress - Wordpress:没有电子商务的会员网站的 Woocommerce
- google-apps-script - 如何获取谷歌可视化表中单选按钮的值