C#正则表达式找到组缺少一个字符串?

问题描述:

首先,我很难与正则表达式。道歉前面如果这是很容易的,我只是想念它:(C#正则表达式找到组缺少一个字符串?

好吧,所以我们说我正在寻找解析我的源代码,并找到我所有的私人功能。此外,让我们说我想得到的代码,整个块,所以我可以检查它

正则表达式匹配:。

Private Function[\s\S]*?End Function 

的伟大工程

现在,如果我想找到失踪退回所有功能什么声明?我似乎无法找出这一个(见上面的re:正则表达式,我不知道相处得很好)。

任何人都指着我在正确的方向吗?我正在使用正则表达式的.NET实现,如果这很重要(似乎 - 我发现似乎没有任何Java示例工作!)

我正在使用regexstorm.net进行测试,如果它很重要:)谢谢!

+0

为什么你不使用你的上面的正则表达式,然后foreach匹配,检查捕获的字符串是否包含'return'?这将非常准确,非常容易。 – Jonesopolis

看起来您可能正在分析Visual Basic。您可以使用微软的代码分析工具(Roslyn)来解析代码并分析不同的部分。这将防止必须查找不同代码文件的不同语法接受度。以下示例代码将确定Function是私有的还是具有as子句。

string code = @" 
    Function MyFunction() 
    End Function 

    Private Function MyPrivateFunction() 
    End Function 

    Function WithAsClause() As Integer 
    End Function 
    "; 

// Parse the code file. 
var tree = VisualBasicSyntaxTree.ParseText(code); 

var root = tree.GetCompilationUnitRoot(); 

// Find all functions in the code file. 
var nodes = root.DescendantNodes() 
    .Where(n => n.Kind() == SyntaxKind.FunctionBlock) 
    .Cast<MethodBlockSyntax>(); 

foreach (var node in nodes) 
{ 
    // Analyze the data for the function. 
    var functionName = node.SubOrFunctionStatement.Identifier.GetIdentifierText(); 
    bool isPrivate = node.BlockStatement.Modifiers.Any(m => m.Kind() == SyntaxKind.PrivateKeyword); 
    var asClause = node.SubOrFunctionStatement.AsClause; 
    bool hasAsClause = asClause != null; 

    Console.WriteLine($"{functionName}\t{isPrivate}\t{hasAsClause}"); 
} 
+0

好的......那就是冷静,我不会说谎。谢谢,我甚至都不知道这件事存在! – John

+0

根据您的项目要求,您也可以使用相同的框架自动更新代码。 – joncloud