使用正则表达式解析文本

时间:2010-02-07 21:29:55

标签: regex parsing

我有.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 :(得分:0)

试试这个正则表达式:

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

假设^标记字符串的开头,\n是换行符,.与换行符不匹配。

答案 1 :(得分:0)

假设实现

  1. 匹配多行(/.../m
  2. 使用\A表示行的开头
  3. 这应匹配一个“术语”:

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

答案 2 :(得分:0)

将一行与一个前导非空白字符匹配,后跟一行或多行以及前导TAB:

$ 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>