使用RegEx在自定义标签之间获取文本

时间:2016-10-09 14:18:12

标签: c# regex parsing

我正在开发一种自定义编程语言,它将转换为C#然后进行编译。如何实现以下目标。

以下是我的自定义语言示例

Input
{
   //variables are assigned here
}
Logic
{
   //Logic is defined here
}
Output
{
   //Output here
}

在上面的代码中,我想将Input,Logic和Output分成三个字符串, 中间部分将具有兼容的C#(通用于Java)代码。使用RegEx分离这三个块的最佳方法是什么。

我没有使用任何解析器,因为我认为它们会有点矫枉过正,因为实际的代码是c#。

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

Input[^\{]*\{([^\}]*)\}\nLogic[^\{]*\{([^\}]*)\}\nOutput[^\{]*\{([^\}]*)\}

组1,2,3具有输入,逻辑和输出内容

编辑: 正如你所指出的那样,里面也可能有花括号。所以这是更新的正则表达式。

Input(.*)Logic(.*)Output(.*)

Tried here

以下是c#中的示例代码:

using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"Input(.*)Logic(.*)Output(.*)";
        string input = @"Input
{
   {input is here}
}
Logic{
   logic is here
}





Output{
   output is here
}";
        RegexOptions options = RegexOptions.Singleline;

        Match match = Regex.Match(input, pattern, options);
        Console.WriteLine("'{0}' found at index {1}", m.Value, m.Index);
    }
}

但坦率地说,还有很多其他情况可能发生。请注意,即使是逻辑,输入和输出也可能出现在您的代码中。因此,使用其他东西来分隔块是明智的。说, 而不是使用{},你可以使用不太可能的东西,比如#START ##END#