MATLAB Answers


Help using Regexp:

さんによって質問されました 2018 年 5 月 23 日
最新アクティビティ per isakson
さんによって 編集されました 2018 年 5 月 24 日
I'm a bit confused on how to use regexp to get information that's between braces. For example, I have the following text:
str='Some.Text {a1=v1 a2=v2}';
val=regexp(str, ?, 'match', 'once')
In "?" should be a like a pattern of special characters (lookaheads, lookbehinds, non-greedys, etc) but I don't know how to make it work to just extract everything inside {}.
Can someone help me?
Thanks in advance!

  0 件のコメント

サインイン to comment.




1 件の回答

per isakson
回答者: per isakson
2018 年 5 月 23 日
編集済み: per isakson
2018 年 5 月 23 日

One way
>> str='Some.Text {a1=v1 a2=v2}';
>> cac = regexp( str, '(?<={)[^}]+(?=})', 'once', 'match' )
cac =
a1=v1 a2=v2
[^}]+ is better than .+ because
  • avoids the problem with "greedies"
  • better performance; easier to evaluate
'(?<=\{)[^}]+(?=\})' it doesn't hurt to escape {} if in doubt whether the are special characters.

  3 件のコメント

2018 年 5 月 23 日
Any book or article that you recommend specially for these special characters and information extraction? (?<={)[^}]+(?=}) ?
per isakson
2018 年 5 月 23 日
There are many good resources on the Internet. However, Matlab has it's own regular expression flavor. It's close to a subset of PCRE, (PERL Compatible RE). (Not the latest version of PRCE though.) Thus,
per isakson
2018 年 5 月 23 日
xpr = [
'(?<={) ' ... % look behind for literal {
'[^}]+ ' ... % one or more of anything, but literal }
'(?=}) ' ... % look ahead for literal }
xpr( isspace(xpr) ) = [];
cac = regexp( str, xpr, ... );
I find this way of writing regular expressions good. It makes me think more and experiment less; it helps me avoid falling into an infinite "trial-and-error-loops".
  • "space" is a bit of a problem. I write space as \x20
  • The final look ahead isn't needed, since + is greedy

サインイン to comment.

Translated by