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

标签 c# regex ironpython

是的,标题很奇怪,但我不知道如何正确描述我的问题。不管怎样……让我们开始解决问题吧。

要完成的工作

我的老板想要一个函数来读取 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/

相关文章:

c# - 如何在 .NET 中获取夏令时期间的 UTC 偏移量

c# - 如何在 silverlight 应用程序中接收电子邮件?

javascript - 我可以在 text.replace 函数的第二部分中使用正则表达式的部分吗?

c# - 是否可以在 Iron python 中对带有字符串的动态数组进行排序?

c# - IronPython 在线程中使用 numpy 时抛出 InsufficientMemoryException

c# - 为linq查询结果添加索引

c# - 如何使用 C# 迭代分层数据并输出层次结构

.net - 用逗号匹配 0 个或多个单词的正则表达式

regex - 使用 perl 脚本从字符串中删除特殊字符

c# - 在 Visual Studio C# 中使用 beautifulSoup 和 request 等 python 模块