gpt4 book ai didi

c# - 用于解析函数和参数的正则表达式

转载 作者:太空狗 更新时间:2023-10-29 21:22:39 25 4
gpt4 key购买 nike

我有以下字符串:

function(param1, param2, param3, param4, ..., paramN)

我需要一个正则表达式代码来将它解析为一个字符串数组:

function
param1
param2
param3
param4
.
.
.
paramN

我在网上尝试了几个例子,但似乎没有一个对我有用。

[编辑]

不接受这个建议。检查上面的代码:

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);
}
}
}
}

输出:

function("a", "b", "c");
Matches: 0
Matches: 0

这里出了点问题...感谢帮助。

最佳答案

根据您的函数的复杂程度,这实际上可能非常棘手。请参阅我在 here 上的类似回答 。要点是将正则表达式分解为两个问题。先获取函数名,再获取参数。

总而言之,这将提取函数名称:

\b[^()]+\((.*)\)$

对于参数,this处理参数以及参数中的函数:

([^,]+\(.+?\))|([^,]+)

这将处理嵌套函数:

(?:[^,()]+((?:\((?>[^()]+|\((?<open>)|\)(?<-open>))*(?(open)(?!))\)))*)+

但是,如果您需要支持完整的 C# 语法,这会很快变得棘手,例如参数中的注释等。参见here进行讨论。

根据评论更新

抱歉,我遗漏了一些复制错误(现已更正)。您缺少函数正则表达式中的第一个\。您还使用相同的模式来提取参数,而您需要如上所述的第二个正则表达式。此外,由于每行只有一个函数,您可以只进行一次匹配。此代码将起作用:

    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 );

}

输出:

FuncTag: function(param1, param2)
Matches: 2
ParamTag: param1
ParamTag: param2

关于c# - 用于解析函数和参数的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20961243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com