Сотни RegEx на одну строку - PullRequest
       4

Сотни RegEx на одну строку

2 голосов
/ 14 сентября 2011

В ответ на мой предыдущий вопрос Сотни RegEx на одну строку Я получил регулярное выражение, подобное следующему

(section1:|section2:|section3:|section[s]?4:|(special section:|it has:|synonyms:)).*?(?=section1:|section2:|section3:|section[s]?4:|(special section:|it has:|synonyms:)|$)

раздел секции в поиске регулярных выражений

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

Ответы [ 3 ]

4 голосов
/ 14 сентября 2011

Используйте лексический анализатор вместо регулярных выражений.

1 голос
/ 15 сентября 2011
  1. Для работы с производительностью в таком регулярном выражении вы можете использовать префиксную оптимизацию https://code.google.com/p/graph-expression/wiki/RegexpOptimization

  2. Эта структура позволяет вам писать регулярные выражения с проверкой типов с помощью Java DSL. Таким образом, это стало рефакторингом и ремонтопригодностью. https://code.google.com/p/graph-expression/

1 голос
/ 14 сентября 2011

Возможно, попробуйте генератор синтаксического анализатора, подобный тому, который обсуждался в Что лучше, ANTLR или JavaCC? ?

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

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