我试图在我们的内部库中找到所有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:什么是输入,什么匹配,您
希望正则表达式匹配什么,等等。
更多&回答...