ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-11-22 23:07:29  阅读:256  来源: 互联网

标签:ironpython c regex


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

要做的工作

我的老板想要一个函数,该函数可以读取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|$)

标签:ironpython,c,regex
来源: https://codeday.me/bug/20191122/2063394.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有