2013-05-22 3 views
0

Я пытаюсь сопоставить значения тегов (стили музыкального стиля) xml.Совпадение нескольких строк в строке

Это несколько примеров:

Один музыкальный жанр: (Pop) (отн = "тег"> Поп)

<span class="genres"><a href="http://www.mp3crank.com/genre/shoegaze" rel="tag">Pop</a></span> 

Две музыкальные жанры: (Регги) (Ska) (отн =» тег "> Reggae) (отн =" тег "> Ska)

<span class="genres"><a href="http://www.mp3crank.com/genre/reggae" rel="tag">Reggae</a>/<a href="http://www.mp3crank.com/genre/ska" rel="tag">Ska</a></span> 

Более двух музыкальных жанров: (Alternative) (Инди) (Rock) (отн =" тег "> Alternative) (отн =" тег "> Indie) (rel =" tag "> Rock)

<span class="genres"><a href="http://www.mp3crank.com/genre/alternative" rel="tag">Alternative</a>/<a href="http://www.mp3crank.com/genre/indie" rel="tag">Indie</a>/<a href="http://www.mp3crank.com/genre/rock" rel="tag">Rock</a></span> 

Что мне нужно, чтобы получить значения «жанр», чтобы добавить его в переменной:

rel="tag">Genre</a> 

... или лучше, если я могу получить «Жанр» без отн =» тег "> часть, но на самом деле неважно.

Это RegEx, который я сделал, не работает хорошо, соответствует только первому тегу, даже если существует два или более тега жанра.

Dim RegEx_AlbumStyle As New Regex(<a><![CDATA[rel=.+</a>\s?[^><]|rel=.+</a>]]></a>.Value) 

Это код:

Dim AlbumStyle as string 

Dim RegEx_AlbumStyle As New Regex(<a><![CDATA[rel=.+</a>\s?[^><]|rel=.+</a>]]></a>.Value) 

If Line.Contains(<a><![CDATA[<span class="genres">]]></a>.Value) Then 

For Each Style In RegEx_AlbumStyle.Match(Line).Groups 
    MsgBox("match:" & Style.ToString) 

    ' I need to append all found matches to a string variable 
    ' AlbumStyle += ", " & Style.ToString 
    ' But I only find one match even if exists more than one genre value in the string 
Next 

End If 
+1

Ваш ответ [здесь] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except -xhtml-self-contains-tags) и [здесь] (http://htmlagilitypack.codeplex.com/) – I4V

+0

@ I4V мой вопрос заключается в том, чтобы помочь мне создать это регулярное выражение, чтобы получить нужные значения, а не как разобрать xml используя htmlagilitypack, также вопрос о первом URL-адресе не совпадает с этим, это проблема другого типа с использованием regex, но в любом случае спасибо за комментарий. – ElektroStudios

+4

Мое намерение с первой ссылкой должно было показать * Вы не можете разобрать [X] HTML с регулярным выражением * – I4V

ответ

1

Согласитесь, что это может нарушить в будущем, и это не самый лучший способ, но, возможно, это поможет, если вы хотите идти по этому пути. Это возвращает 3 MessageBoxes для меня предполагая калибровочный тег загружается в строку:

Private Sub Input() 
    Dim genreString As String = "<span class=""genres""><a href=""http://www.mp3crank.com/genre/alternative"" rel=""tag"">Alternative</a>/<a href=""http://www.mp3crank.com/genre/indie"" rel=""tag"">Indie</a>/<a href=""http://www.mp3crank.com/genre/rock"" rel=""tag"">Rock</a></span>" 
    ShowGenres(genreString) 
End Sub 
Private Function ShowGenres(ByVal s As String) As String 
    Dim m As Match = Regex.Match(s, "tag"">(\w+)<") 
    Do While m.Success 
     MessageBox.Show(m.Groups(1).ToString) 
     m = m.NextMatch() 
    Loop 
    Return False 
End Function 
+0

Ваш код настолько велик, спасибо. на будущее вы можете сказать мне, что это лучший способ сделать это за вас? возможно, htmlagilitypack? Я хочу знать, чтобы экспериментировать в будущем, теперь я предпочитаю делать это по этому маршруту. спасибо снова – ElektroStudios

+1

Нет проблем - HTML Agility Pack потрясающий, или вы можете проверить LINQ to XML для работы с XML-файлами - примеры: http://www.dotnetcurry.com/ShowArticle.aspx?ID=564 – maxedev