Соберите результаты из групп в одну строку - PullRequest
1 голос
/ 06 апреля 2019

Я хочу разобрать html-страницу погоды для Openhab.
Это значительная часть целого 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 голосов
/ 06 апреля 2019

Вам нужны именованные группы захвата.Именованные группы захвата позволяют вам указать заданную часть в регулярном выражении с именем, чтобы извлечь ее позже.Именованная группа захвата начинается с (?, Затем следует регулярное выражение и заканчивается на).

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

После этого вы сможете извлечь сумму, применив свое регулярное выражение к входу и выбрав группу с именем сумму изоб этом.

Чтение о OpenHab онлайн Я не уверен, что они поддерживают именованные группы захвата.Таким образом, альтернативой будет использование приведенного выше регулярного выражения для сопоставления всех строк с суммами во входных данных.Затем с помощью регулярного выражения замените на этой совпадающей строке.Так что-то вроде ...

Используйте это регулярное выражение для получения сумм:

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

Используйте это регулярное выражение в результате приведенного выше регулярного выражения, чтобы заменить не суммы (и замените их пустымстрока для их удаления):

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