user1205577
user1205577

Reputation: 2450

MATLAB 2012 regular expression

I have a set of strings that I'd like to parse in MATLAB 2012 that all have the following format:

string-int-int-int-int-string

I'd like to pluck out the third integer (the rest are 'don't cares'), but I haven't used MATLAB in ages and need to refresh on regular expressions. I tried using the regular expression '(.*)-(.*)-(.*)-\d-(.*)' but no dice. I did check out the MATLAB regexp page, but wasn't able to figure out how to apply that information to this case.

Anyone know how I might get the desired result? If so, could you explain what the expression you're using is doing to get that result so that others might be able to apply the answer to their unique situation?

Thanks in advance!

Upvotes: 3

Views: 2169

Answers (2)

Andrew Cheong
Andrew Cheong

Reputation: 30273

str = 'XyzStr-1-2-1000-56789-ILoveStackExchange.txt';

[tok] = regexp(str, '^.+?-.+?-.+?-(\d+?)-.+?-.+?', 'tokens');

tok{:}
ans = 
    '1000'

Update

Explanation, upon request.

  • ^ - "Anchor", or match beginning of string.
  • .+? - Wildcard match, one or more, non-greedy.
  • - - Literal dash/hyphen.
  • (\d+?) - Digits match, one or more, non-greedy, captured into a token.

Upvotes: 5

Anirudha
Anirudha

Reputation: 32797

^.*?-.*?-.*?-(\d+)-.*?-.*?$

OR

^(?:[^-]*?-){3}(\d+)(?:.*?)$

Group1 now contains your required data

Upvotes: 5

Related Questions