将结果从组收集到一个字符串

时间:2019-04-06 05:11:54

标签: regex regex-group

我想为Openhab解析天气html页面。
这是整个html的重要部分:

                <!-- Amount of Sun -->
            <tr>
                <td class="label_det">
<span class="sum">∑</span> <span class="unit">in u</span>
</td>


                            <td class="sunamount">

                    10.2
                    </td>


                            <td class="sunamount">

                    10.6
                    </td>


                            <td class="sunamount">

                    5.9
                    </td>


                            <td class="sunamount">

                    6.8
                    </td>


                            <td class="dgrey sunamount">

                    6.8
                    </td>


                            <td class="dgrey sunamount">

                    5.4
                    </td>


                            <td class="sunamount">

                    5
                    </td>

            </tr>

我想将所有数字收集到一个字符串中,我知道这也许不可能,但是可能... 像这样:“ 10.2 10.6 5.9 6.8 6.8 5.4 5”

完整的html和我当前的正则表达式的示例在这里:https://regex101.com/r/nrzPHU/1

感谢您的咨询。

1 个答案:

答案 0 :(得分:0)

您需要命名的捕获组。命名捕获组允许您在正则表达式中指定给定的部件,并使用名称来稍后提取。命名的捕获组以(?开头,然后是正则表达式,最后以)结束。

<td class\=\".*?sunamount\">\s+(?<amount>\d+(\.\d+)?)\s+<\/td>

然后,您可以通过将正则表达式应用于输入并从中选择名为“金额”的组来提取金额。

阅读有关OpenHab online的信息,我不确定它们是否支持命名捕获组。因此,一种替代方法是使用上面的正则表达式将所有行与输入中的金额进行匹配。然后在该匹配的字符串上使用正则表达式替换。像...

使用此正则表达式获取金额:

<td class\=\".*?sunamount\">\s+\d+(\.\d+)?\s+<\/td>

在上述正则表达式的结果上使用此正则表达式替换非金额(并将其替换为空字符串以将其删除):

([\s]|<td class=".*?">|<\/td>)