MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   如何使用Python正则表达式匹配MATLAB的函数语法? (https://www.labfans.com/bbs/showthread.php?t=23094)

poster 2019-12-10 20:30

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

MATLAB函数语法如下所示:

function output = func_name(input) 签名可以跨越多行。

我从一个像这样的模式开始:

re.compile(r"^.*function (.*)=(.*)\([.\n]*\)$", re.M) 但我不断收到不受支持的模板运算符错误。任何指针表示赞赏!

[B]编辑:[/B]

我现在有:

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) 我的问题是,为什么没有给出,而不是在第一次停止额外的行) ?



[B]回答:[/B]

如果您通过re.T而不是re.M作为re.compile的第二个参数( re.template当前未记录的条目-是打算使用它的一个),则应该出现的特殊(内部)错误,简而言之,模板RE不支持重复或回溯。您可以在调用re.compile之前print re.M以在代码中显示其值吗?

解决之后,我们可以讨论所需的RE的详细信息(简而言之:如果input部分可以包含括号,那么您re.DOTALL走运了,否则re.DOTALL和对模式的一些重写会有所帮助)-但可以解决此问题内部错误的发生似乎是优先的。

[B]编辑[/B] :诊断出此错误(根据此Q下面的评论),转到OP的当前问题: re.DOTALL|re.MULTINE ,在模式末尾加上“ $”,再加上到处贪婪匹配(使用.*代替非贪婪的.*? ),共同[I]确保[/I]如果正则表达式匹配,则将尽可能广泛地匹配...这正是此组合所要求的。最好用一个特定的例子来打开另一个Q:什么是输入,什么匹配,您[I]希望[/I]正则表达式匹配什么,等等。



[url=https://stackoverflow.com/questions/2180784]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 04:56

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.