我正在尝试从像字符串这样的函数调用中提取参数,例如:
GetStatus("Param1", "Param2", "ParamWith\"Quotations\"")
我对正则表达式没用,但是可以用这种方式匹配这些参数值,包括转义引用吗?
即。 Param1,Param2,ParamWith“Quotations”
更好的是,有没有办法提取函数名称,只有括号和参数存在的参数?
我正在使用C#,如果这有所不同。
答案 0 :(得分:1)
您可以拆分和修剪(获取功能名称。
然而,单独使用“引用”来获取参数会更加困难:Can regular expressions be used to match nested patterns?。请参阅LB的解决方案,但正如所说,正则表达式不是为了处理嵌套而发明的。
如果参数周围没有引号,您询问是否可以从字符串中获取函数名称和所有参数。我想说这可以避免嵌套的引号,这样更合理。我确信有很多关于如何解析类Unix命令的引用(即命令-options参数“带引号的参数”),但我会使用正则表达式来解决这个问题:
Regex reg = new Regex("\".*?\"")
这将为您提供所有带引号的参数。然后从原始字符串中删除所有匹配项,并在其余参数的“,”上拆分。这就是我如何思考它,但如果你研究它可能会有一个更简单的方法。
要扩展我的最后一点,如果你有一个像这样的字符串“GetStatus(Param1,Param2,ParamsWith \”Quotations \“)”我真的不知道该告诉你什么,特别是如果有','在“引文”中。
答案 1 :(得分:0)
你可以在'('获取方法名称然后拆分','来拆分参数
上的String.split编辑: 使用正则表达式代替更好的解决方案,您可以自己进行解析。假设一个正确形成的字符串:
答案 2 :(得分:0)
假设你的参数只包含字母,数字和空格
string fxn = @"GetStatus(""Param1"", ""Param2"", ""ParamWith\""Quotations\"""")";
var result = Regex.Matches(fxn, @"\""(?<GRP>[\w \\\""]+)\""|(?<GRP>\w+[ ]*)")
.Cast<Match>()
.Select(m => m.Groups["GRP"].Value)
.ToArray();