使用 regxr 或 python 中任何合适的方式在函数之间提取代码

Posted

技术标签:

【中文标题】使用 regxr 或 python 中任何合适的方式在函数之间提取代码【英文标题】:Extract code between the function using regxr or any suitable way in python 【发布时间】:2021-12-29 17:42:47 【问题描述】:

目标/需要帮助:使用正则表达式提取函数和类内的代码(大括号 内的代码)

但是,可以使用除正则表达式之外的其他库来查找解决方案

编程语言:Python

问题:并非函数内部的所有代码都被提取(它部分提供了类内部的代码。 测试文件:JAVA代码(归并排序算法)

我的python代码:(在代码中,我试图在类之间提取代码但不工作,也想为函数做)

f=open("MergeSort.java","r")
code=f.read()
className="MergeSort"
results = set()
regxStr=className+' \.*?\'
codeTraverse=code.replace("\n", " ")+""
codeTraverse=codeTraverse.replace("\t"," ")
re.findall(regxStr, codeTraverse)
print("------------------**************------------answers",re.findall(regxStr, codeTraverse))
print("finish*******")

输出图片: enter image description here

目标文件:我试图从中提取代码的 JAVAFILE 如下

/* Java program for Merge Sort Code taken from geeks for geeks*/
class MergeSort


    void merge(int arr[], int l, int m, int r)
    
        
        int n1 = m - l + 1;
        int n2 = r - m;

        int L[] = new int[n1];
        int R[] = new int[n2];

        for (int i = 0; i < n1; ++i)
            L[i] = arr[l + i];
        for (int j = 0; j < n2; ++j)
            R[j] = arr[m + 1 + j];

        int i = 0, j = 0;

        int k = l;
        while (i < n1 && j < n2) 
            if (L[i] <= R[j]) 
                arr[k] = L[i];
                i++;
            
            else 
                arr[k] = R[j];
                j++;
            
            k++;
        

        while (i < n1) 
            arr[k] = L[i];
            i++;
            k++;
        

        while (j < n2) 
            arr[k] = R[j];
            j++;
            k++;
        
    


    void sort(int arr[], int l, int r)
    
        if (l < r) 
        
            int m =l+ (r-l)/2;

        
            sort(arr, l, m);
            sort(arr, m + 1, r);

        
            merge(arr, l, m, r);
        
    


    static void printArray(int arr[])
    
        int n = arr.length;
        for (int i = 0; i < n; ++i)
            System.out.print(arr[i] + " ");
        System.out.println();
    

    public static void main(String args[])
    
        int arr[] =  12, 11, 13, 5, 6, 7 ;

        System.out.println("Given Array");
        printArray(arr);

        MergeSort ob = new MergeSort();
        ob.sort(arr, 0, arr.length - 1);

        System.out.println("\nSorted array");
        printArray(arr);
    

注意事项: 因此,假设我从 python 请求函数“printArray”。我正在尝试使用 regxr 获取函数“printArray”中的所有代码,类似地,当我在类名中请求代码时,我应该能够在类中获取代码。

我确实查看了 *** 上的正则表达式代码,如下所示,https://***.com/questions/38456603/extract-string-inside-nested-brackets 但是我仍然无法有效地使用它。

我被困住了,需要来自 *** 社区的帮助。谢谢,请。

【问题讨论】:

据我所知,没有单一的正则表达式可以解析 Java 语言。 任何其他方式来实现我的目标,任何 python 库或任何代码示例,我都可以使用?请帮助 【参考方案1】:

r"(?&lt;=\)(\D*|\d*)(?=\)"gm

这应该抓住所有不是数字\D(包括新行)的东西,以及所有在花括号之间的数字\d。这也排除了花括号本身,在(?&lt;=\) 后面是正面的,在(?=\) 后面是正面的。

【讨论】:

不工作,设置为空,这个表达式不工作请提供完整代码。并提供关于类名+正则表达式字符串的位置。请参考问题的目标和代码。 抱歉,该正则表达式适用于我测试的一些 java 代码。 (?&lt;=\)(\X*)(?=\) 可与 PCRE 正则表达式引擎一起使用,但不要认为可与 Python 一起使用。看看regex101.com。您可以粘贴您要匹配的内容,然后快速尝试不同的正则表达式。那里也有很多互动信息。

以上是关于使用 regxr 或 python 中任何合适的方式在函数之间提取代码的主要内容,如果未能解决你的问题,请参考以下文章

Python`如果x不是None`或`if not x is None`?

如果任何列中不需要图像/图标,MFC CListCtrl是否合适?

python中合适的“啥都不做” lambda表达式?

在类中使用私有静态变量是否合适?

最合适的数据结构(Python)

在Python或C ++中为K均值聚类/删除背景蒙版