Предварительно составив очень большое регулярное выражение - PullRequest
2 голосов
/ 12 декабря 2008

У меня очень странная проблема. У меня есть очень большое регулярное выражение для поиска определенных слов в некотором тексте (RegEx выглядит примерно так: (?i)\b(a|b|c|d...)\b; и т. Д., Где a, b, c, d представляют слова). Во всяком случае, я поместил его в предварительно скомпилированную сборку, чтобы немного ускорить процесс, однако проблема в том, что предварительно скомпилированное регулярное выражение не работает так же, как некомпилированная версия того же регулярного выражения ... o_0

Например, если регулярное выражение: (?i)\b(he|desk)\b, и я пропускаю через него «helpdesk», то предварительно скомпилированная версия возвращает «lp», поэтому слова «он и стол» распределяются так, как будто граничное условие вообще не работает, однако если я использую точно такое же регулярное выражение, а не предварительно скомпилированную версию, это работает просто отлично ... Кто-нибудь знает, если я что-то упускаю?

Спасибо

(Извините, используя VB.Net и C #)

Ответы [ 3 ]

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

Поскольку вы ищете целые слова, как насчет поиска \w+ и проверки, находится ли слово в коллекции. Набор на основе хеша или хэш-карта будет хорошо работать здесь. Этот подход облегчит обновление списка, если возникнет такая необходимость.

0 голосов
/ 12 декабря 2008

Я написал два тестовых приложения, одно в C # и одно в VB.Net, оба демонстрируют одинаковое поведение. Кажется, что предварительно скомпилированная версия регулярного выражения, которое я использую, игнорирует граничные условия для некоторых слов. Я пытался не использовать регулярные выражения, но у меня есть список из 3000+ слов в выражении, и после некоторых тестов это, кажется, лучшее решение, единственное, что я не хочу его в моем основном коде и предпочел бы иметь его в предварительно скомпилированная сборка ...

Спасибо

0 голосов
/ 12 декабря 2008

Вы дали два разных языка там. Так что, возможно, есть какое-то взаимодействие.

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

Может быть, было бы эффективнее выполнить поиск без регулярных выражений?

...