RMBHATTI Ответов: 2

Как разделить следующие данные на основе совпадений фигурных скобок (начало и конец) с помощью C# или регулярных выражений


<div class="form-group form-col-2">
	{{<div class="form-group-inline">
		<label>{{ABCDEF}}</label>
		<div class="inpt">
		{{??DropList??}}
			
		{{??DropList??}}
		</div>
	</div>}}                                        
</div>
<div class="form-group form-col-2">
	{{<div class="form-group-inline">
		<label>{{DEFGHI}}</label>
		<div class="inpt">
		{{??DropList??}}
			
		{{??DropList??}}
		</div>
	</div>}}                                        
</div>


Что я уже пробовал:

мне просто нужно, как follws
1)
{{<div class="form-group-inline">
		<label>{{ABCDEF}}</label>
		<div class="inpt">
		{{??DropList??}}
			
		{{??DropList??}}
		</div>
	</div>}} 

2)
{{ABCDEF}}

3)
{{??DropList??}}

4)
{{??DropList??}}

2 Ответов

Рейтинг:
1

Patrice T

Цитата:
Как разделить следующие данные на основе совпадений фигурных скобок (начало и конец) с помощью C# или регулярных выражений

Для того чтобы сделать это с помощью регулярных выражений, вам необходимо использовать пакет регулярных выражений, который поддерживает рекурсивные паттерны.
Рекурсивное Регулярное Выражение—Учебник[^]
Рекурсия Регулярных Выражений[^]
Захват с помощью рекурсии регулярных выражений и подпрограмм[^]

Всего лишь несколько интересных ссылок, которые помогут построить и отладить регулярное выражение.
Вот ссылка на документацию по регулярным выражениям:
perlre - perldoc.perl.org[^]
Вот ссылки на инструменты, помогающие создавать регулярные выражения и отлаживать их:
.Объем тестер регулярное выражение - регулярное выражение шторм[^]
Регулярное Средство Выражения Эспрессо [^]
RegExr: Learn, Build, & Test RegEx[^]
Этот пример показывает вам регулярное выражение в виде красивого графика, который действительно полезен для понимания того, что делает регулярное выражение:
Debuggex: онлайн-тестер визуальных регулярных выражений. JavaScript, Python и PCRE.[^]


Рейтинг:
1

Karthik_Mahalingam

Возможно это не самое лучшее решение но оно соответствует вашим требованиям, Regex здесь не используется

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??}}


              }
          }