Python 有没有一种方法可以在一个单词和一个字符之间提取所有字符串?
我试图使用正则表达式从一个长字符串中提取所有函数声明。现在,我正在尝试使用模式Python 有没有一种方法可以在一个单词和一个字符之间提取所有字符串?,python,regex,Python,Regex,我试图使用正则表达式从一个长字符串中提取所有函数声明。现在,我正在尝试使用模式function\\|(.*?\\\\}来提取所有字符串,其中第一个单词是function,最后一个字符是},后面是一个空行。我不太熟悉正则表达式,所以我不确定我做错了什么,但我没有得到任何匹配 是否有更好/更容易的模式用于此 我当前的尝试/实施: import re def pull_functions(source_code): pattern = "function\|(.*?)\|\}&qu
function\\|(.*?\\\\}
来提取所有字符串,其中第一个单词是function
,最后一个字符是}
,后面是一个空行。我不太熟悉正则表达式,所以我不确定我做错了什么,但我没有得到任何匹配
是否有更好/更容易的模式用于此
我当前的尝试/实施:
import re
def pull_functions(source_code):
pattern = "function\|(.*?)\|\}"
# substring = re.search(pattern, source_code).group(1)
# print(substring)
matches = re.findall(
pattern=r'function\|(.*?)\|\}',
string=source_code
)
print(matches)
return
以下是源代码的示例:
function foo()
public
returns (bool)
{
... Function Contents ...
}
/**
* Some information about this functions...
*/
function bar(type v1, type v2)
public
returns (bool)
{
... Function Contents ...
}
以下正则表达式是否符合您的要求
(^\s*function\s+(.*\s)+?\})
然后捕获Group1。在case-inside方法中,只有当{….}它能够处理这个问题时才有
您是否试图提取整个函数的源代码?如果是这样的话,那么regex就不是合适的工具。例如,如果任何函数中有一个if{…}
,您的模式将过早停止。@TimBiegeleisen是的,我正在尝试获取所有函数的源代码…我是否需要循环文件?老实说,您需要在这里编写某种解析器。一种简单的方法是使用正则表达式来查找\b函数\w+\(.*?\)\{
。然后,从这一点开始,使用堆栈来跟踪{
和}
。当您找到}
时,函数就结束了,这样堆栈中就没有网架了。@Kmandai这几乎可以工作了,但我需要每个函数都是单独的匹配项。目前,我正在考虑是否可以以某种方式添加一个换行符要求……以便“function”一词的出现启动一个新的组。见本期: