是的,标题很奇怪,但是我不知道如何正确描述我的问题.不管…让我们解决问题.
要做的工作
我的老板想要一个函数,该函数可以读取python文件的所有函数并返回包含找到的函数的DataTable.该函数应该用IronPython(实际上使用C#库的Python)编写.
问题
我对Python还是比较陌生,我不知道该语言的功能,所以我开始编写函数,是的,除了一个奇怪的问题,它的功能还不错.我编写了一个正则表达式来查找功能并对其进行测试,然后我下载了RegEx Tester. Regex测试器显示了我想要的结果:组1-函数名称,组2-函数参数,组3-函数的内容.
由于某些神奇的原因,它在进行实时测试时不起作用.我的意思是说,第3组实际上没有任何输出,这是行不通的.在用另一个(在线)RegEx Tester测试该表达式后,它向我显示,第3组实际上没有该函数的内容,它只有一小部分,以换行符/返回字符开头.
在我的测试用例中,第3组的结果都相同,以换行符/返回字符开头,以函数return结束(例如return objDic).
问题:那里到底出了什么问题?我不知道我的RegEx有什么问题.
正则表达式
objRegex = Regex(r"(?i)def[\s]+([\w]+)\(([\, [\w]+)\)(?:[\:{1}]\s*)([\n].*(?!\ndef[\s]+))+")
数据
def test_function(some_parameter):
try:
some_cool_code_goes_here()
return obj
except Exception as ex:
DetailsBox.Show(ex)
def another_cool_function(another_parameter):
try:
what_you_want()
return obj
except Exception as ex:
DetailsBox.Show(ex)
结果
匹配:def test_function(some_parameter):…
职位:..
长度: ..
第1组:test_function
第2组:some_parameter
第3组:(换行符/返回符)
返回obj
但是第3组应该是:
try:
some_cool_code_goes_here()
return obj
except Exception as ex:
DetailsBox.Show(ex)
希望您能帮到我:3谢谢!
解决方法:
尽管@Hamza在他的评论中说您的正则表达式中有几个问题,但我认为它们的复杂性更高,但与主体不匹配的原因可能是您没有让.特殊的元字符与新行匹配,因此它将在第一个Try:语句之后的第一个新行字符处停止.
要解决此问题,您需要让.匹配换行符,这是可以正常工作的正则表达式的简化版本:
(?i)def\s+(\w+)\s*\(([\, \w]+)\)(?:\s*:\s*)(.+?)(?=def|$)