Read data from string

4 次查看(过去 30 天)
Artyom
Artyom 2013-8-7
I have string line:
x='abc123(xyz456)'
How to read information only in brackets, to have result:
y='xyz456'.

采纳的回答

Evan
Evan 2013-8-7
编辑:Evan 2013-8-7
>> x='abc123(xyz456)';
>> regexp(x,'(?<=\().+(?=\))','match')
ans =
'xyz456'
This command uses regexp and, specifically, lookaround assertions. It's basically saying, if you find a group of characters, look behind to see if there is an "open parenthesis" character and look ahead to see if there is a "close parenthesis" character. If so, return all the characters between them.
  6 个评论
per isakson
per isakson 2013-8-7
编辑:per isakson 2013-8-7
Surprise!
regexp('_A_A-', '(?<=_)[^_]+?(?=-)', 'match' )
ans =
'A'
Thus, doc should say something like
Lazy expression: match as few characters as necessary **downstream**.
Cedric
Cedric 2013-8-7
编辑:Cedric 2013-8-8
Yep, in other words, it stops when it matches the last part of the pattern for the first time (lazy), but it doesn't pull back the starting point (the tail? ;-)) to minimize the match (not that lazy finally, or really really lazy in fact). Thankfully, you see/understand this once and you never forget it!

请先登录,再进行评论。

更多回答(2 个)

Azzi Abdelmalek
Azzi Abdelmalek 2013-8-7
y=regexp(x,'(?<=\()[\w]+(?=\))','match')
  1 个评论
Azzi Abdelmalek
Azzi Abdelmalek 2013-8-7
%or
x=x='abc123 (xyz 45_6) ddd (rtr)ccc'
y=regexp(x,'\(([\w\s]+)\)','tokens');
celldisp(y)

请先登录,再进行评论。


Jan
Jan 2013-8-7
x = 'abc123(xyz456)';
ini = strfind(x, '(');
fin = strfind(x, ')');
key = x(ini(1) + 1:fin(1) - 1);

类别

Help CenterFile Exchange 中查找有关 Characters and Strings 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by