Я пытаюсь разобрать имя функции и ее параметры, чтобы обновить содержимое строки. Я храню вызов функции в строке, и прежде чем вызывать его, мне нужно изменить его, а затем вызвать. Ниже приведена строка, содержащая функцию.
var expression = "AreEqual ( \"test\" , Obj.Prop ) && AreEqual ( 1 , 2 ) && AREeQuAl( Obj.Prop , 1 )&& AreEqual (\"\\\"\\\",\" , 2 ) AND AreEqual (',' , ',' ) AreEqual ( \"A,B\" , Obj.Prop ) ";
var expectedOutPut = "MyClass.AreEqual( new (\"test\" AS A) , new ( Obj.Prop AS A) ) && MyClass.AreEqual ( new( 1 AS A ), new ( 2 AS A) ) && MyClass.AREeQuAl( new (Obj.Prop AS A) , new ( 1 AS A) ) && MyClass.AreEqual (new ( \"\\\"\\\",\" AS A) , new ( 2 AS A) ) && MyClass.AreEqual (new (',' AS A) , new( ',' AS A )) && MyClass.AreEqual ( new (\"A,B\" AS A) ,new ( Obj.Prop AS A) )";
Я пытался следовать регулярному выражению, но оно разрывается в правильных запятых в двойных кавычках.
@"(AreEqual.*?\()\s*([^,]+?)\s*(?=,|$)"
using System;
using System.Text.RegularExpressions;
public class Program
{
public static void Main()
{
string pattern = @"(AreEqual.*?\()\s*([^,]+?)\s*(?=,|$)";
string input = @"AreEqual ( ""test"" , Obj.Prop ) && AreEqual ( 1 , 2 ) && AREeQuAl( Obj.Prop , 1 )&& AreEqual (""\""\"","" , 2 ) AND AreEqual (',' , ',' ) AreEqual ( ""A,B"" , Obj.Prop )";
RegexOptions options = RegexOptions.Multiline | RegexOptions.IgnoreCase;
foreach (Match m in Regex.Matches(input, pattern, options))
{
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
}
Console.ReadLine();
}
}