Проблемы с C # регулярным выражением длинной загрузки - PullRequest
0 голосов
/ 11 декабря 2010

У меня тихое длинное регулярное выражение, а иногда он быстро реагирует, иногда он загружается долго, как сумасшедший.

вот мое регулярное выражение:

<div class=""rwResult bg"">.*?mp3/d/[^>]+>(?<Name>[^<]+)</a>.*?artist:[^>]+>(?<Artist>[^<]+).*?user</span>[^>]+[^""]+""(?<Uploader>[^""]+).*?category:.*?"">.*?"">(?<Category>[^<]+).*?time: (?<Duration>[^ ]+) \| (?<StreamSize>[0-9]+) (?<Weight>[^ ]+) \| listened: (?<Clicks>[0-9]+).*?<a href=""(?<DownloadLink>http://dl[^""]+)

вместо того, чтобы использовать много регулярных выражений для каждой группы, я предпочитаю делать одноразовое регулярное выражение. Есть ли какая-нибудь функция, которую я мог бы проверить или избежать длинной загрузки во время выполнения регулярного выражения?

Я работаю на C # или F #, надеюсь, кто-нибудь может ответить на эту проблему.

спасибо.

Ответы [ 2 ]

2 голосов
/ 11 декабря 2010

Похоже, вы пытаетесь проанализировать документ XML с помощью регулярного выражения.Это не совсем оптимальный подход.Я предполагаю, что вы видите проблемы из-за использования обратного отслеживания в вашем регулярном выражении.

Вы можете попытаться переписать свое регулярное выражение, но XML не является регулярным языком и, следовательно, не может быть проанализирован регулярными выражениями.

Взгляните на документ Как читать XML из файла с помощью Visual C # , чтобы начать работу.

Sidenote: Для развлеченийчитайте о том, что происходит при попытке анализа нерегулярного языка с помощью регулярного выражения, см. переполнение стека вопрос .

1 голос
/ 12 декабря 2010

Я думаю, вы используете не тот инструмент. Вы действительно хотите Xpath и, возможно, XSLT. Единственный раз, когда вы хотите использовать регулярные выражения для анализа необработанного XML, это когда предположительно синтаксически нарушается синтаксически XML-код.

Серьезно, взгляните на Xpath - это волшебство, позволяющее углубиться в структуру XML-документов и извлечь нужные кусочки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...