Разбор текста с использованием регулярных выражений - PullRequest
4 голосов
/ 08 февраля 2010

У меня есть словарь в формате .txt, который выглядит следующим образом:

term 1
    definition 1
    definition 2

term 2
    definition 1
    definition 2
    definition 3
etc.

Перед определением всегда есть вкладка, в основном это так:

term 1
[tab]definition 1
[tab]definition 2
etc.

Теперь мне нужно обернуть каждый термин и его определения тегом <term>, то есть:

<term>
term 1
    definition 1
    definition 2
</term>

Я пытался использовать регулярные выражения, чтобы найти термин с его определениями, но безуспешно. Не могли бы вы помочь мне с этим?

Спасибо за любые предложения!

Ответы [ 3 ]

0 голосов
/ 08 февраля 2010

Предполагая реализацию, которая

  1. Соответствует нескольким строкам (/.../m)
  2. Использует \A для обозначения начала строки

это должно соответствовать одному «термину»:

\A[^\t][^\n]+\n(\t[^\n]+\n)+
0 голосов
/ 08 февраля 2010

Совпадение строки с первым непробельным символом, за которым следуют одна или несколько строк с начальными символами табуляции:

$ perl -0077 -pe 's/^(\S.+\n(^\t.+\n)+)/<term>\n$1<\/term>\n/mg' dict
<term>
term 1
        definition 1
        definition 2
</term>

<term>
term 2
        definition 1
        definition 2
        definition 3
</term>
0 голосов
/ 08 февраля 2010

Попробуйте это регулярное выражение:

(^|\n).+(\n[ \t]+.+)*

Предполагая, что ^ обозначает начало строки, \n - символ перевода строки, а . не соответствует разрывам строки.

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