Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用正则表达式获取自定义标记之间的文本_C#_Regex_Parsing - Fatal编程技术网

C# 使用正则表达式获取自定义标记之间的文本

C# 使用正则表达式获取自定义标记之间的文本,c#,regex,parsing,C#,Regex,Parsing,我正在开发一种自定义编程语言,它将转换为C#,然后进行编译。如何实现以下目标 下面是我的自定义语言示例 Input { //variables are assigned here } Logic { //Logic is defined here } Output { //Output here } 在上面的代码中,我想将输入、逻辑和输出分成三个字符串, 中间部分将有兼容的C#(Java也通用)代码。使用RegEx分隔这三个块的最佳方法是什么 我没有使用任何解析器,因为我认为

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

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

Input
{
   //variables are assigned here
}
Logic
{
   //Logic is defined here
}
Output
{
   //Output here
}
在上面的代码中,我想将输入、逻辑和输出分成三个字符串, 中间部分将有兼容的C#(Java也通用)代码。使用RegEx分隔这三个块的最佳方法是什么

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

您可以尝试以下方法:

Input[^\{]*\{([^\}]*)\}\nLogic[^\{]*\{([^\}]*)\}\nOutput[^\{]*\{([^\}]*)\}
第1、2、3组具有输入、逻辑和输出内容

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

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

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

但坦率地说,许多其他情况也可能发生。请注意,即使是逻辑、输入和输出也可能包含在代码中。因此,明智的做法是使用其他方法来分隔块。说,
不要使用{},你可以使用一些不太可能的东西,比如说#开始##结束#

greate!,但是想想这个场景。输入{var string=“Input{is here}”}逻辑{Logic is here}输出{Output is here}我后来考虑过,我会在一段时间内更新它,请稍候…Input GGG{Input is here}逻辑{Logic is here}输出{Output is here}。。。。这段代码不应该工作太多…你需要设置一个适当的格式。在输入{}和输出{}之间可以有什么?换行符、制表符、空格还有什么?你可能必须为此制定一个规则,否则很难确定所有的可能性
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);
    }
}