我的格式为字符串:
MyList.Where(abc).GroupBy(def).Sum(ghi)
The Where& GroupBy部分是可选的,因为函数的参数是,所以。
ThisList.Count
也有效。
我正在尝试找到一个与此匹配的RegEx字符串并返回值:
列表名称(例如MyList),where条件(例如abc),GroupBy属性(例如def),函数名称(例如Sum)和函数属性(例如ghi)。
澄清:
列表名称是一个字
abc可以是一个复杂的表达式,但是没有不在引号中的小括号
def将是一个单词
ghi将是单个单词或由“,”
答案 0 :(得分:2)
(?<list>\w+)\s* ([.]\s*Where\s*[(]\s*(?<wherearg>.*?)\s*[)]\s*)? ([.]\s*GroupBy\s*[(]\s*(?<groupbyarg>.*?)\s*[)]\s*)? [.]\s*(?<func>\w+)\s*[(]\s*(?<funcarg>.*?)\s*[)]
答案 1 :(得分:1)
您可以使用正则表达式来验证语法,例如:
^[A-Za-z]+(\.[A-Za-z]+\([A-Za-z]+\))*(\.[A-Za-z]+)?
但这会导致有效或无效决定。
我不确定你是否真的想要同时grep方法名称和值。这将限制您的语法:例如,所有方法(GroupBy,Where)必须按正确的顺序排列。也许更容易将字符串分割为.
并逐个提取所需的部分。
答案 2 :(得分:1)
假设where / groupby / function参数是单词,您可以使用:
^(\w+)(?:\.Where\((\w+)\))?(?:\.GroupBy\((\w+)\))?\.(\w+)(?:\((\w+)\))?$
如果它们是复杂的C#表达式,那么相应的正则表达式会非常复杂,明天你会讨厌选择正则表达式。
答案 3 :(得分:0)
这为您提供了预期的结果。
^(?<List>[^\.]\*)|\.(?<Op>[^\(\.]*)\(*(?<Param>[^\)\.]*)