0

您好在使用正则表达式进行条件匹配方面需要帮助。

ex.my 文件有以下内容 {hello.program='function'`; bye.program='脚本'; }

我正在尝试使用正则表达式来匹配其中的字符串.program='function'

pattern = '[.program]+\=(function)'

也试过pattern='[^\n]*(.hello=function)[^\n]*';

pattern_match = regexp(myfilename,pattern , 'match')

但这会返回我 pattern_match={} 而我希望结果是 hello.program='function'`;

4

2 回答 2

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.参数;
m2.Value = matlabstandard;
m2.Volatility = '可调';
m2.Configurability = '无';
m2.ReferenceInterfaceFile ='';
m2.DataType = '自动';

我的目标是找到所有匹配的行, .DataType='auto'

这是使用正则表达式查找匹配行的方法

%# 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));
于 2012-12-13T17:01:03.790 回答
0

试试这个,因为它完全匹配 .program='function' :

    (\.)program='function'

我认为这不起作用:

    '[.program]+\=(function)'

因为 [] 的工作方式。这是一个解释我为什么这么说的链接:http ://www.regular-expressions.info/charclass.html

于 2012-12-13T17:11:54.530 回答