使用C#中的正则表达式提取表单标记中的操作属性?

使用C#中的正则表达式提取表单标记中的操作属性?,c#,regex,string,C#,Regex,String,我想提取https://www.sth.com/yment/Paymentform.aspx从下面的字符串开始 <form id='paymentUTLfrm' action='https://www.sth.com/yment/Paymentform.aspx' method='post'> 我如何使用Regex或其他东西来完成它?使用。从长远来看,这将为你节省很多麻烦 using HtmlAgilityPack; var doc = new HtmlDocumen

我想提取
https://www.sth.com/yment/Paymentform.aspx
从下面的字符串开始

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

我如何使用
Regex
或其他东西来完成它?

使用。从长远来看,这将为你节省很多麻烦

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;

虽然我同意一般的html解析最好使用html agility pack(etc)而不是正则表达式来完成,但这是一个非常简单的要求,正则表达式是合适的。我不是正则表达式专家,但这一个有效:

action=["'](.*)["']
(*)将捕获url


也许一些专家可以添加一个组件来改进这个…

虽然我不鼓励使用正则表达式来解析HTML,但这非常简单,一个正则表达式就足够了。对于更复杂的操作,请使用适当的(X)HTML解析器,如HtmlAgilityPack

这个正则表达式应该可以:

<\s*form[^>]*\s+action=(["'])(.*?)\1
]*\s+action=([“'])(.*)\1
编辑: 更新了正则表达式,以便在URL中使用撇号。请注意,URL现在位于第二个捕获组中


请参见

您的正则表达式是贪婪的,会导致特定的问题,在本例中,它将匹配
action=https://www.sth.com/yment/Paymentform.aspx“method='post'
因此有免责声明和改进要求——我不认为提供替代方法的想法,即使不是完美的,也是投反对票的原因。@Matthew-我真的认为html agility pack对于OP的需求来说是过分了。@Null-你的正则表达式实际上可以工作(与我的相比)-我学到了一些东西-thanx.太好了,谢谢。如果我们没有标签的
id
,那么我们怎么做呢?例如:我们只有name属性。SelectSingleNode区分大小写吗?@Mohammad,在HtmlAgilityPack中,
id
不区分大小写。要使
@name
匹配不区分大小写,您可以告诉我们你的正则表达式是错误的,原因有两个:① 考虑<代码> <代码>(是的,撇号在URL中是有效的)。② 考虑一下<代码> <代码>。穆罕默德,那就是那个捕获组。看到右边有一个“匹配捕获”的div。使用那些捕获组。是的,但不是正确的X(坏例子)。参见。TimWi固定,虽然我从未见过那些“野生的”。好吧,你还有什么其他的方法来处理我的正则表达式?
<\s*form[^>]*\s+action=(["'])(.*?)\1