Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我试图在我们的内部库中找到所有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:什么是输入,什么匹配,您希望正则表达式匹配什么,等等。 更多&回答... |
![]() |
![]() |