Извлечь атрибут действия в теге Form с помощью Regex в C #? - PullRequest
2 голосов
/ 21 августа 2010

Я хочу извлечь https://www.sth.com/yment/Paymentform.aspx из нижеприведенной строки

<form id='paymentUTLfrm' action='https://www.sth.com/yment/Paymentform.aspx' method='post'>

Как я могу сделать это с Regex или чем-то?

Ответы [ 3 ]

4 голосов
/ 21 августа 2010

Хотя я не рекомендую использовать регулярные выражения для разбора HTML, это достаточно просто, чтобы регулярных выражений было достаточно.Для более сложных операций используйте правильный (X) HTML-анализатор, такой как HtmlAgilityPack.

Это регулярное выражение должно работать:

<\s*form[^>]*\s+action=(["'])(.*?)\1

РЕДАКТИРОВАТЬ:

Обновленное регулярное выражение, поэтому оно будетработа с апострофами в URL.Обратите внимание, что URL теперь находится во 2-й группе захвата.

См. На rubular

3 голосов
/ 21 августа 2010

Использование Html Agility Pack . Это избавит вас от многих неприятностей в долгосрочной перспективе.

using HtmlAgilityPack;     
var doc = new HtmlDocument();                                       
doc.LoadHtml("<form id='paymentUTLfrm' action='https://www.sth.com/yment/Paymentform.aspx' method='post'>");      
var form = doc.DocumentNode.SelectSingleNode("id('paymentUTLfrm')");
string action = form.Attributes["action"].Value;

Он поддерживает загрузку страниц непосредственно из Интернета, а также XPath (используется выше). HTML-код не должен быть действительным.

РЕДАКТИРОВАТЬ: Если вы хотите использовать имя:

doc.DocumentNode.SelectSingleNode("//*[@name='paymentUTLfrm']");
0 голосов
/ 21 августа 2010

Хотя я бы согласился, что общий html-анализ лучше всего выполнять с помощью html agility pack (и т. Д.), А не с помощью регулярных выражений, это довольно простое требование, и регулярное выражение будет уместным.Я не эксперт по регулярным выражениям, но этот работает:

action=["'](.*)["']

(. *) Захватит URL

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

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