VB.NET - 如何向 .contains 中添加超过1个字符串

3
我有一个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个回答

3

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建议的扩展方法比上述第二种方法更优雅,我个人认为。


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
请考虑使用:Return values.Any(Function(val) str.Contains(val))。 - Luhmann

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接