VB.net基本的RegEx问题

时间:2011-02-16 16:16:05

标签: html regex vb.net

您好 我正在尝试从某些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虽然我正在寻找这个问题的具体答案,如果可能的话,指向一个好的正则表达式教程的指针也会很棒

由于

2 个答案:

答案 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

可以在http://www.regular-expressions.info

找到一个好的教程

答案 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