Как избежать блоков html с помощью регулярного выражения - PullRequest
1 голос
/ 14 июля 2020

Мне нужно найти все строки, окруженные «[» и «]», используя регулярное выражение, но избегая строк внутри блока <table></table>, например:

<html>
<body>
<p><table>
   <tbody>
      <tr>
         <td style="border-style: solid; border-width:1px;">
            <span style="font-family: Courier;">[data1]</span>
         </td>
         <td style="border-style: solid; border-width:1px;">
            <span style="font-family: Courier;">[data10]</span>
         </td>
      </tr>
   </tbody>
</table>
</p>
<p>[data3]&nbsp;&nbsp;[data4]&nbsp;&nbsp;[data5]</p>
</body>
</html>

только в этом случае [ data3], [data4] и [data5] должны быть найдены. Пока у меня есть это: @"(((?<!<span>)(\[[a-zA-Z_0-9]+)](?!<\/span>))|((?<!<span>)(\[[a-zA-Z_0-9]+)])|((\[[a-zA-Z_0-9]+)](?!<\/span>)))(?!.*\1)" Это обнаруживает все блоки [], которые не окружены тегами, и я попытался добавить отрицательный просмотр вперед и назад, но он не работает, он по-прежнему получает блоки внутри блока таблицы.

Надеюсь, вы, ребята, можете мне с этим помочь.

1 Ответ

0 голосов
/ 14 июля 2020

Регулярное выражение ниже вернет все ваши [данные], заключенные в тег <p> </p>.

/<p.*?>\[(.*?)\]<*.p>/g

, поэтому приведенное выше регулярное выражение вернет это <p>[data3]&nbsp;&nbsp;[data4]&nbsp;&nbsp;[data5]</p> из приведенного выше HTML кода.

Когда вы получаете эту строку из регулярного выражения выше, используйте нижеприведенное регулярное выражение, чтобы получить только всю строку [data].

/\[(.*?)\]/g

, поэтому вышеуказанное регулярное выражение вернет «[data3] [data4] [data5]» сверху строка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...