2010-02-07 4 views
4

У меня есть словарь в формате .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> 

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

Благодарим за любые предложения!

+1

Какое использование языка/регулярного выражения вы используете? – Gumbo

+0

Я использую PHP 5.3.0 – Peterim

+0

Пожалуйста, не говорите мне, что вы пытаетесь создать допустимый xml с регулярными выражениями. –

ответ

0

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

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

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

0

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

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

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

\A[^\t][^\n]+\n(\t[^\n]+\n)+ 
0

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

 
$ 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> 
Смежные вопросы