使用 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"(?<=\)(\D*|\d*)(?=\)"gm
这应该抓住所有不是数字\D
(包括新行)的东西,以及所有在花括号之间的数字\d
。这也排除了花括号本身,在(?<=\)
后面是正面的,在(?=\)
后面是正面的。
【讨论】:
不工作,设置为空,这个表达式不工作请提供完整代码。并提供关于类名+正则表达式字符串的位置。请参考问题的目标和代码。 抱歉,该正则表达式适用于我测试的一些 java 代码。(?<=\)(\X*)(?=\)
可与 PCRE 正则表达式引擎一起使用,但不要认为可与 Python 一起使用。看看regex101.com。您可以粘贴您要匹配的内容,然后快速尝试不同的正则表达式。那里也有很多互动信息。以上是关于使用 regxr 或 python 中任何合适的方式在函数之间提取代码的主要内容,如果未能解决你的问题,请参考以下文章
Python`如果x不是None`或`if not x is None`?