VB.NET - 向.contains添加1个以上的字符串

时间:2010-02-06 09:54:59

标签: vb.net contains

我有一个HTMLElementCollection,我正在使用For Each循环来查看InnerHTML是否包含某些单词。如果它们确实包含任何这些关键字,则会将其保存到文件中。

一切正常但我想知道是否有办法简化。这是一个样本

For Each Helement As HtmlElement In elements

     If Helement.InnerHtml.Contains("keyword1") Or Helement.InnerHtml.Contains("keyword2") Or Helement.InnerHtml.Contains("keyword3") Or Helement.InnerHtml.Contains("keyword4") Or Helement.InnerHtml.Contains("keyword5") = True Then
         ' THE CODE TO COPY TO FILE
     End If

Next Helement

是否存在任何可行的方式:

If Helement.InnerHtml.Contains("keyword1", "keyword2", "keyword3", "keyword4", "keyword5")

我现在这样做的方式似乎很浪费,而且我对此非常感兴趣。

3 个答案:

答案 0 :(得分:3)

您可以将Extension Method写入提供多输入选项的字符串,例如:

 Public Module StringExtensionMethods
     Private Sub New()
     End Sub
     <System.Runtime.CompilerServices.Extension> _
     Public Function Contains(ByVal str As String, ByVal ParamArray values As String()) As Boolean
         For Each value In values
             If str.Contains(value) Then
                 Return True
             End If
         Next
         Return False
     End Function
 End Module

然后你可以调用它,就像在你的第二个例子中那样:)

答案 1 :(得分:2)

1)一种方法是将InnerHtml字符串与包含关键字的正则表达式作为替代列表进行匹配:

Imports System.Text.RegularExpressions

Dim keywords As New Regex("keyword1|keyword2|keyword3")

...

If keywords.IsMatch(HElement.InnerHtml) Then ...

如果您事先知道所有关键字,这应该会很好。

2)另一种方法是建立关键字列表,然后将InnerHtml字符串与每个列表元素进行比较:

Dim keywords = {"keyword1", "keyword2", "keyword3"}

...

For Each keyword As String In keywords
    If HElement.InnerHtml.Contains(keyword) Then ...
Next

修改:Rob建议的扩展方法会产生比上述方法#2,IMO更优雅的代码。

答案 2 :(得分:0)

这是另一种使用LINQ清除逻辑的扩展方法:

<Extension()>
Public Function MultiContains(str As String, ParamArray values() As String) As Boolean
    Return values.Any(Function(val) str.Contains(val))
End Function
相关问题