且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何基于大括号匹配(开始和结束)拆分以下数据使用C#或REGEX

更新时间:2023-02-18 14:53:04

引用:

如何基于大括号匹配(开始和结束)拆分以下数据使用C#或REGEX

How to split following data based on matches of curly bracket (start and over) USING C# or REGEX



为了使用regEx执行此操作,您需要使用支持递归模式的RegEx包

递归正则表达式教程 [ ^ ]

正则表达式递归 [ ^ ]

用Regul捕获表达式递归和子例程 [ ^ ]



只是一些有趣的链接,可帮助构建和调试RegEx。

以下是RegEx文档的链接:

perlre - perldoc.perl.org [ ^ ]

以下是帮助构建RegEx并调试它们的工具的链接:

.NET正则表达式测试程序 - 正则表达式风暴 [ ^ ]

Expresso正则表达式工具 [ ^ ]

RegExr:Learn,Build,&测试RegEx [ ^ ]

此节目RegEx是一个很好的图表,它非常有助于理解RegEx的作用:

Debuggex:在线可视正则表达式测试器。 JavaScript,Python和PCRE。 [ ^ ]


In order to do this with regEx, you need to use a RegEx package that support recursive patterns.
Recursive Regex—Tutorial[^]
Regular Expression Recursion[^]
Capturing with Regular Expression Recursion and Subroutines[^]

Just a few interesting links to help building and debugging RegEx.
Here is a link to RegEx documentation:
perlre - perldoc.perl.org[^]
Here is links to tools to help build RegEx and debug them:
.NET Regex Tester - Regex Storm[^]
Expresso Regular Expression Tool[^]
RegExr: Learn, Build, & Test RegEx[^]
This one show you the RegEx as a nice graph which is really helpful to understand what is doing a RegEx:
Debuggex: Online visual regex tester. JavaScript, Python, and PCRE.[^]


这可能不是一个很好的解决方案,但它符合您的要求,正则表达式不在这里使用



This may not be an excellent solution but it matches your demand, Regex is not used here

string file = @"D:\Projects\CPTemp\CPTemp\TextFile1.txt";
           string data = File.ReadAllText(file);
          var parts=  data.Split( new string[] {"{{<div "} , System.StringSplitOptions.None);
          foreach (string item in parts)
          {
              string result1 = "{{<div " + item;
              if (result1.Contains("</div>}} "))
              {
                  result1 = result1.Substring(0, result1.IndexOf("</div>}}"));
                  result1 += "</div>}}";
                  /*{{<div class="form-group-inline">
                       <label>{{ABCDEF}}</label>
                       <div class="inpt">
                       {{??DropList??}}

                       {{??DropList??}}
                       </div>
                   </div>}} */

                  string result2 = result1;
                  result2 = result2.Substring(result2.IndexOf("<label>") + 7, (result2.IndexOf("</label>") - result2.IndexOf("<label>") - 7));  // {{ABCDEF}}

                  string result3 = result1;
                  result3 = result3.Substring(result3.IndexOf("<div class=\"inpt\">") + 18 ,result3.IndexOf("</div>") -result3.IndexOf("<div class=\"inpt\">") -18   );
                  result3 = result3.Trim();
                  var partsLast = result3.Split('\n').Where(k => !string.IsNullOrWhiteSpace(k.Trim())).ToArray();

                  result3 = partsLast[0].Trim();  //{{??DropList??}}

                  string result4 = partsLast[1].Trim(); //{{??DropList??}}


              }
          }