gpt4 book ai didi

python - 如何使用 Python 正则表达式来匹配 MATLAB 的函数语法?

转载 作者:太空宇宙 更新时间:2023-11-03 13:24:39 26 4
gpt4 key购买 nike

我试图在我们的内部库中找到所有 MATLAB 函数的所有输入/输出。我是正则表达式的新手(第一次),一直在尝试使用 Python 的 re 库中的多行模式。

MATLAB 函数语法如下:

function output = func_name(input)

其中签名可以跨越多行。

我从这样的模式开始:

re.compile(r"^.*function (.*)=(.*)\([.\n]*\)$", re.M)

但我不断收到不受支持的模板运算符错误。任何指针表示赞赏!

编辑:

现在我有:

pattern = re.compile(r"^\s*function (.*?)= [\w\n.]*?\(.*?\)", re.M|re.DOTALL)

给出的匹配如下:

        function [fcst, spread] = ...
VolFcstMKT(R,...
mktVol,...
calibrate,...
spread_init,...
fcstdays,...
tsperyear)

if(calibrate)
if(nargin < 6)
tsperyear = 252;
end
templen = length(R)

我的问题是为什么它会给出额外的行而不是在第一个 ) 处停止?

最佳答案

如果您传递 re.T 而不是 re.M 作为 re 的第二个参数,您应该会遇到奇怪的(内部)错误。 compile(re.template -- 当前未记录的条目 -- 是打算使用它的条目,简而言之,模板 RE 不支持重复或回溯)。在调用此 re.compile 之前,您能否打印 re.M 以显示它在您的代码中的值(value)?

一旦修复,我们就可以讨论您想要的 RE 的细节(简而言之:如果 input 部分可以包含括号,那么您就不走运了,否则 re.DOTALL 和一些重写你的模式应该有所帮助)——但修复这个奇怪的内部错误似乎是优先考虑的事情。

编辑:诊断出此错误(根据此 Q 下方的评论),继续讨论 OP 当前的问题:re.DOTALL|re.MULTINE,加上模式末尾的 '$',加上无处不在的贪婪匹配(使用 .*,而不是 .*? 用于非贪婪),所有这些都在一起确保如果正则表达式匹配,它将匹配尽可能广泛的范围......这正是这个组合所要求的。可能最好打开另一个带有特定示例的问题:输入是什么,匹配什么,您希望正则表达式匹配什么,等等。

关于python - 如何使用 Python 正则表达式来匹配 MATLAB 的函数语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2180784/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com