Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 20:30   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 如何使用Python正则表达式匹配MATLAB的函数语法?

我试图在我们的内部库中找到所有MATLAB函数的所有输入/输出。我是regex的新手(第一次),一直在尝试在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之前print re.M以在代码中显示其值吗?

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

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



更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 05:16


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