leo*_*on 3 python regex matlab
我试图在我们的内部库中找到所有MATLAB函数的所有输入/输出.我是新的(第一次)正则表达式,并一直试图在Python的re库中使用多行模式.
MATLAB函数语法如下:
function output = func_name(input)
Run Code Online (Sandbox Code Playgroud)
签名可以跨越多行.
我开始使用如下模式:
re.compile(r"^.*function (.*)=(.*)\([.\n]*\)$", re.M)
Run Code Online (Sandbox Code Playgroud)
但我一直得到一个不受支持的模板操作符错误.任何指针都很赞赏!
编辑:
我现在有:
pattern = re.compile(r"^\s*function (.*?)= [\w\n.]*?\(.*?\)", re.M|re.DOTALL)
Run Code Online (Sandbox Code Playgroud)
给出如下匹配的匹配:
function [fcst, spread] = ...
VolFcstMKT(R,...
mktVol,...
calibrate,...
spread_init,...
fcstdays,...
tsperyear)
if(calibrate)
if(nargin < 6)
tsperyear = 252;
end
templen = length(R)
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么它会给出额外的线而不是在第一线停下来)?
如果您传递re.T而不是re.M作为第二个参数re.compile(re.template- 当前未记录的条目 - 是打算使用它的那个,并且,简而言之,模板RE不支持,那么您应该得到的特殊(内部)错误重复或回溯).你可以print re.M在调用之前在代码中显示它的价值re.compile吗?
一旦修复了,我们就可以讨论你想要的RE的细节(简而言之:如果input部分可以包括括号你运气不好,否则re.DOTALL你的模式的一些改写应该有帮助) - 但修复这个奇怪的内部错误发生似乎优先考虑
编辑:有这个bug诊断(按照这个问答下面的评论),移动到OP当前的问题:re.DOTALL|re.MULTINE加上"$"的模式结束,再加上无处不在贪婪匹配(使用.*,而不是.*?用于非贪婪的),一起确保如果正则表达式匹配,它将尽可能广泛地匹配......这正是这个组合所要求的.可能最好用一个特定的例子打开另一个Q:输入是什么,匹配什么,你想要正则表达式匹配什么,等等.