您好 我正在尝试从某些HTML源代码中的输入标记中保存值。 标签看起来像这样:
<input name="user_status" value="3" />
我在变量(pageSourceCode)中有页面源,需要计算一些正则表达式来获取值(本例中为3)。 到目前为止我有这个:
Dim sCapture As String = System.Text.RegularExpressions.Regex.Match(pageSourceCode, "\<input\sname\=\""user_status\""\svalue\=\""(.*)?\""\>").Groups(1).Value
大部分时间都可以正常工作,但是此代码用于处理来自多个站点(使用相同平台)的源代码,有时输入标记中还包含其他属性,或者它们的顺序不同,例如:
<input class="someclass" type="hidden" value="3" name="user_status" />
我只是不了解正则表达式以应对这些情况。
非常感谢任何帮助。
PS虽然我正在寻找这个问题的具体答案,如果可能的话,指向一个好的正则表达式教程的指针也会很棒
由于
答案 0 :(得分:1)
如果<input[^>]*\bvalue="([^"]+)"
标记从不包含尖括号,则可以搜索input
。
[^>]*
匹配除>
之外的任意数量的字符,这样可以防止正则表达式在标记之间意外匹配。
\b
确保我们仅匹配value
而不是x_value
。
修改强>
如果您只想查看input
所在的name="user_status"
代码,那么您可以使用其他lookahead assertion执行此操作:
<input(?=[^>]*name="user_status")[^>]*\bvalue="([^"]+)"
在VB.NET中:
ResultString = Regex.Match(SubjectString, "<input(?=[^>]*user_status=""name"")[^>]*\bvalue=""([^""]+)").Groups(1).Value
找到一个好的教程
答案 1 :(得分:0)
假设这是一个ASP.Net页面,而不是一些外部HTML,你无法控制更好的解决方案只是访问控件。
在您的输入控件中添加ID字段,并在此处添加runat =“server”。
<input id="user_status" runat="server" class="someclass" type="hidden" value="3" name="user_status" />
您可以删除“名称”字段。它通常与ID字段相同,ID是更好的选择。如果需要,您实际上可以同时拥有ID和名称字段,它们都可以是相同的值。
在您的代码中,您可以通过ID访问该值,而无需正则表达式。
Me.user_status.value