是的,标题很奇怪,但我不知道如何正确描述我的问题。不管怎样……让我们开始解决问题吧。
要完成的工作
我的老板想要一个函数来读取 python 文件的所有函数并返回包含找到的函数的数据表。这个函数应该用 IronPython(实际使用 C# 库的 Python)编写。
问题
我是 Python 的新手,我不知道这门语言的功能,所以我开始编写我的函数,是的,它工作得很好,除了一个奇怪的问题。我写了一个正则表达式来查找函数并测试它我下载了一个 RegEx 测试器。 Regex Tester 显示了我想要的结果:第 1 组 - 函数名称,第 2 组 - 函数参数和第 3 组 - 函数的内容。
由于某些神奇的原因,它在进行实时测试时不起作用。我的意思是 with 不起作用,第 3 组实际上没有输出。用另一个(在线)测试表达式后RegEx Tester , 它告诉我,第 3 组实际上没有函数的内容,它只有一小部分,以换行符/返回字符开始。
在我的测试用例中,第 3 组的结果都是一样的,以换行符/返回字符开始,以函数 return 结束(例如 return objDic)。
问题:那里到底出了什么问题?我不知道我的正则表达式出了什么问题。
正则表达式
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 组: (换行符/回车符)
返回对象
但是第 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|$)
关于c# - 无法将代码块放入我的正则表达式匹配组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18232343/