2010-02-06 8 views
2

For Each Loop를 사용하여 InnerHTML에 특정 단어가 들어 있는지 확인하는 HTMLElementCollection이 있습니다. 키워드에 해당 키워드가 포함되어 있으면 파일에 저장됩니다.VB.NET - .contains에 두 개 이상의 문자열 추가

모든 것이 잘 작동하지만 단순화 할 수있는 방법이 있는지 궁금합니다. 다음은 샘플

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") 

내가하고 있어요 방법은 지금 막 낭비 것, 그리고 그것에 대해 꽤 OCD입니다.

답변

2

1) 한 가지 방법은 대안의 목록으로 키워드를 포함하는 정규 표현식에 대해 InnerHtml 문자열과 일치하는 것입니다 : 당신이 사전에 모든 키워드를 알고있는 경우

Imports System.Text.RegularExpressions 

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

... 

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

이 잘 작동합니다.

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

... 

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

편집 : 롭 제안 확장 방법

2) 다른 방법은 키워드의 목록을 작성하고 목록의 각 요소에 대해 InnerHtml 문자열을 비교하는 것 위의 방법 # 2, IMO보다 더 우아한 코드가됩니다.

3

당신과 같은 다중 입력 옵션을 제공 문자열에 Extension Method 쓸 수 있습니다 : 당신은 다음 두 번째 예 : 여기

+1

대신에 다음을 고려하십시오. 반환 값 : 함수 (val) str.Contains (val)) – Luhmann

0

같이, 해당 부를 수

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 

다른 확장의 LINQ로 논리를 조금 정리하는 방법 :

<Extension()> 
Public Function MultiContains(str As String, ParamArray values() As String) As Boolean 
    Return values.Any(Function(val) str.Contains(val)) 
End Function 
관련 문제