Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

VB.NET - Adding more than 1 string to .contains

I have an HTMLElementCollection that I'm going through using a For Each Loop to see if the InnerHTML contains certain words. If they do contain any of those keywords it gets saved into a file.

Everything works fine but I was wondering if there is a way to simplify. Here's a sample

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

Does anything exist that would work like:

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

The way I'm doing it now just seems wasteful, and I'm pretty OCD about it.

like image 310
user157603 Avatar asked Dec 11 '25 01:12

user157603


1 Answers

1) One approach would be to match the InnerHtml string against a regular expression containing the keywords as a list of alternatives:

Imports System.Text.RegularExpressions

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

...

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

This should work well if you know all your keywords beforehand.

2) An alternative approach would be to build a list of your keywords and then compare the InnerHtml string against each of the list's elements:

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

...

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

Edit: The extension method suggested by Rob would result in more elegant code than the above approach #2, IMO.

like image 122
stakx - no longer contributing Avatar answered Dec 14 '25 07:12

stakx - no longer contributing