您需要帮助使用regexp进行条件匹配。
ex.my文件包含以下内容 {hello.program ='function'`; bye.program = '脚本'; }
我正在尝试使用regexp来匹配其中包含.program='function'
的字符串:
pattern = '[.program]+\=(function)'
还尝试了pattern='[^\n]*(.hello=function)[^\n]*';
pattern_match = regexp(myfilename,pattern , 'match')
但是这会返回我的pattern_match = {},而我希望结果是hello.program ='function'.;
答案 0 :(得分:2)
如果'function'
附带字符串标记,则需要在匹配中包含这些内容。此外,您需要转义点(否则,它被视为“任何字符”)。 [.program]+
查找方括号中包含的一个或多个字母 - 但您只需查找program
即可。此外,您不需要转义=
- 符号(这可能是混乱的匹配)。
cst = {'hello.program=''function''';'bye.program=''script'''; };
pat = 'hello\.program=''function''';
out = regexp(cst,pat,'match');
out{1}{1} %# first string from list, first match
hello.program='function'
修改强>
回应评论
我的文件包含
m2 = S.Parameter;
m2.Value = matlabstandard;
m2.Volatility ='Tunable';
m2.Configurability ='无';
m2.ReferenceInterfaceFile ='';
m2.DataType ='auto';我的目标是找到匹配的所有行,.DataType ='auto'
以下是使用regexp找到匹配行的方法
%# read the file with textscan into a variable txt
fid = fopen('myFile.m');
txt = textscan(fid,'%s');
fclose(fid);
txt = txt{1};
%# find the match. Allow spaces and equal signs between DataType and 'auto'
match = regexp(txt,'\.DataType[ =]+''auto''','match')
%# match is not empty only if a match was found. Identify the non-empty match
matchedLine = find(~cellfun(@isempty,match));
答案 1 :(得分:0)
尝试这一点,因为它完全符合.program ='function':
(\.)program='function'
我认为这不起作用:
'[.program]+\=(function)'
因为[]的工作方式。这是一个链接,解释了为什么我这么说:http://www.regular-expressions.info/charclass.html