正则表达式在字符串中查找匹配条件

时间:2012-12-13 16:55:03

标签: matlab

您需要帮助使用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'.;

2 个答案:

答案 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