C#-无法将代码块放入我的正则表达式匹配组

是的,标题很奇怪,但是我不知道如何正确描述我的问题.不管…让我们解决问题.

要做的工作

我的老板想要一个函数,该函数可以读取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|$)
上一篇:FastDFS与Nginx的配置说明


下一篇:c#-用Mono编译IronPython