繁体   English   中英

VB.net RegEx基本问题

[英]VB.net basic RegEx problems

您好,我正在尝试在一些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" />

我只是不了解正则表达式不足以应付这些情况。

任何帮助,非常感谢。

附言:尽管我正在寻找这个问题的具体答案(如果有可能),那么指向良好的正则表达式教程的指针也将是不错的选择

谢谢

如果您的input标签从不包含尖括号,则可以搜索<input[^>]*\\bvalue="([^"]+)"

[^>]*匹配任意数量的字符,但>除外,这可以防止正则表达式在标签之间意外匹配。

\\b确保我们只匹配value而不匹配x_value

编辑:

如果只想查看name="user_status" input标签,则可以使用附加的超前断言来实现

<input(?=[^>]*name="user_status")[^>]*\bvalue="([^"]+)"

在VB.NET中:

ResultString = Regex.Match(SubjectString, "<input(?=[^>]*user_status=""name"")[^>]*\bvalue=""([^""]+)").Groups(1).Value

可以在http://www.regular-expressions.info上找到一个很好的教程

假设这是一个ASP.Net页面,而不是您无法控制的某些外部HTML,则更好的解决方案是直接访问控件。

将一个ID字段添加到您的输入控件中,并添加一个runat =“ server”,就像这样。

<input id="user_status" runat="server" class="someclass" type="hidden" value="3" name="user_status" />

您可能可以摆脱“名称”字段。 通常与ID字段相同,ID是更好的选择。 如果需要,您实际上可以同时具有ID和Name字段,并且它们都可以是相同的值。

在后面的代码中,您可以通过ID访问值,而无需使用正则表达式。

Me.user_status.value

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM