Я думаю, что шаблон
<([^>]*<)
будет соответствовать <
, который встречает другой <
до >
(следовательно, не является частью тега)
... и шаблон
(>[^<]*)>
будет соответствовать >
, который следует за другим >
var first = Regex.Replace(@"<abc>fd<jkh</abc><def>e>e</def>",@"<([^>]*?<)",@"<$1");
var final = Regex.Replace(first,@"(>[^<]*?)>",@"$1>");
EDIT:
Это работает, но вы должны пройти через него несколько раз. Я уверен, что есть более чистый метод, но он работает.
class Program
{
static void Main(string[] args)
{
var next = @"<abc>dffs<<df</abc>";
string current;
do
{
current = next;
next = Regex.Replace(current, @"<([^>]*?<)", @"<$1");
next = Regex.Replace(next, @"(>[^<]*?)>", @"$1>");
} while(next != current);
Console.WriteLine(current);
Console.ReadKey();
}
}