C # Regex - Как разобрать строку для шведских букв åäöÅÄÖ?

Я пытаюсь проанализировать файл HTML для строк в этом формате:

<a href="/userinfo/userinfo.aspx?ID=305157" target="main">MyUsername</a> O22</td>

Я хочу получить информацию, где «305157», «MyUsername» и первая буква в «O22» (которая может быть T, K или O).

Я использую это регулярное выражение; <a href="/userinfo/userinfo\.aspx\?ID=\d*" target="helgonmain">\w*</a> \w\d\d и это работает нормально, пока нет никаких åäöÅÄÖ вместо "\w".

Что я должен делать?


person Zolomon    schedule 23.11.2009    source источник
comment
Мне очень жаль, но мне действительно нужно опубликовать эту ссылку здесь: stackoverflow.com/questions/1732348/   -  person Fredrik Mörk    schedule 24.11.2009
comment
Я хотел опубликовать это, но решил, что попытаюсь помочь ему, вместо того, чтобы показать ему, как бесполезно пытаться ;)...   -  person Wookai    schedule 24.11.2009
comment
Да, размещение действительно полезного ответа было бы лучше. Хотя не делал много кода для синтаксического анализа html (но, возможно, предложил бы изучить Html Agility Pack, который время от времени появляется как хорошая библиотека для синтаксического анализа html: codeplex.com/htmlagilitypack)   -  person Fredrik Mörk    schedule 24.11.2009
comment
В итоге оказалось намного проще просто разобрать HTML, чем использовать HTML Agility Pack, я действительно смотрел на Agility, прежде чем попробовать Regex.   -  person Zolomon    schedule 24.11.2009


Ответы (3)


Во-первых: НЕ ИСПОЛЬЗУЙТЕ РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ ДЛЯ АНАЛИЗА HTML. ИСПОЛЬЗУЙТЕ ПАРСЕР HTML.

Во-вторых: если вы действительно хотите это сделать (а не хотите), то вместо \w вы можете сопоставить любой символ, кроме '‹':

<a href="/userinfo/userinfo\.aspx\?ID=\d*" target="helgonmain">[^<]*</a> \w\d\d
person Mark Byers    schedule 23.11.2009

Вы можете использовать класс символов, который включает в себя следующие вещи:

[\wåäöÅÄÖ]*

Или вы можете использовать класс символов Unicode для букв:

\p{L}

или специально для латыни:

\p{InBasicLatin}
person Joey    schedule 23.11.2009

Вы можете использовать \p{L} для соответствия любой «букве», которая будет поддерживать все буквы на всех языках, как это предлагается в этом ТАК вопрос.

Или вы можете просто заменить \w* на [^<]*, чтобы соответствовать всем символам, которые не являются открытием тега HTML.

Но, как говорят другие, синтаксический анализ HTML с использованием регулярных выражений первый шаг к безумию...

person Wookai    schedule 23.11.2009