Men*_*des 6 c# regex asp.net-mvc
我有以下字符串:
function(param1, param2, param3, param4, ..., paramN)
Run Code Online (Sandbox Code Playgroud)
我需要一个正则表达式代码来解析它作为一个字符串数组:
function
param1
param2
param3
param4
.
.
.
paramN
Run Code Online (Sandbox Code Playgroud)
我在网上尝试了几个例子,但似乎没有一个适合我.
[编辑]
没有和这个建议打交道.检查以上代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
namespace TestRegex
{
class Program
{
static void Main(string[] args)
{
string Expression = String.Empty;
while (Expression.Trim() != "EXIT")
{
Expression = Console.ReadLine();
///
/// Get function name
///
var funcTags = Regex.Matches(Expression, @"b[^()]+\((.*)\)$");
Console.WriteLine("Matches: " + funcTags.Count);
foreach (var item in funcTags)
Console.WriteLine("FuncTag: " + item);
///
/// Get parameters
///
var paramTags = Regex.Matches(Expression, @"\b[^()]+\((.*)\)$");
Console.WriteLine("Matches: " + paramTags.Count);
foreach (var item in paramTags)
Console.WriteLine("ParamTag: " + item);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
function("a", "b", "c");
Matches: 0
Matches: 0
Run Code Online (Sandbox Code Playgroud)
这里出了点问题...感谢帮助.
根据你的功能有多复杂,这实际上可能非常棘手.在这里看到我的类似答案.要点是将正则表达式分解为两个问题.首先获取函数名称,然后获取参数.
总之,这将提取函数名称:
\b[^()]+\((.*)\)$
Run Code Online (Sandbox Code Playgroud)
对于参数,它处理参数以及参数中的函数:
([^,]+\(.+?\))|([^,]+)
Run Code Online (Sandbox Code Playgroud)
这将处理嵌套函数:
(?:[^,()]+((?:\((?>[^()]+|\((?<open>)|\)(?<-open>))*(?(open)(?!))\)))*)+
Run Code Online (Sandbox Code Playgroud)
但是,如果您需要支持完整的C#语法,这会很快变得棘手,例如参数中的注释等.请参阅此处进行讨论.
根据评论更新
道歉,我错过了一些复制错误(现已更正).你错过了函数正则表达式中的第一个\.您也使用相同的模式来提取参数,而您需要如上所述的第二个正则表达式.此外,由于每行只有一个功能,您可以进行单一匹配.此代码将起作用:
static void Main( string[] args )
{
string Expression = "function(param1, param2)";
///
/// Get function name
///
var func = Regex.Match( Expression, @"\b[^()]+\((.*)\)$" );
Console.WriteLine( "FuncTag: " + func.Value );
string innerArgs = func.Groups[1].Value;
///
/// Get parameters
///
var paramTags = Regex.Matches( innerArgs, @"([^,]+\(.+?\))|([^,]+)" );
Console.WriteLine( "Matches: " + paramTags.Count );
foreach( var item in paramTags )
Console.WriteLine( "ParamTag: " + item );
}
Run Code Online (Sandbox Code Playgroud)
输出:
FuncTag: function(param1, param2)
Matches: 2
ParamTag: param1
ParamTag: param2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11061 次 |
| 最近记录: |