MATLAB Answers

0

Regular Expressions using regexp

Asked by Eduard Mazur on 10 May 2019
Latest activity Edited by Stephen Cobeldick on 10 May 2019
Hello, I have some problem with understanding regexp expression
I have some names: ["T_24_UZK500.txt"; "FWD_T80_UZK500.txt"; "T80_UZK700.txt"]
how can I get numbers after "T" and after "UZK"?
I need a rule that will describe only the numbers after the designated patterns.

  2 Comments

Are "T" and "UZK" the only possible letters in the names?
It's variable symbols which are defined earlier.
I mean, I have filenames (string) and patterns (variable inside this names). With this information I need extract numerical vallues after variables..

Sign in to comment.

Products


Release

R2018b

1 Answer

Answer by Stephen Cobeldick on 10 May 2019
Edited by Stephen Cobeldick on 10 May 2019
 Accepted Answer

Matching only integer numbers after 'UZK' or 'T_' (it is unclear in your question if the underscore is permitted or not, but the regular expression below is easy to adapt):
>> S = {'T_24_UZK500.txt';'FWD_T80_UZK500.txt';'T80_UZK700.txt'};
>> C = regexp(S,'(?<=(T_?|UZK))\d+','match');
>> C{:}
ans =
'24' '500'
ans =
'80' '500'
ans =
'80' '700'
Or simply by matching any integer numbers:
>> C = regexp(S,'\d+','match');
>> C{:}
ans =
'24' '500'
ans =
'80' '500'
ans =
'80' '700'

  4 Comments

Show 1 older comment
Small change from Stephen's solution: here you can list the potential patterns and the expression will be created according to your list. Also, underscores are removed ahead of time.
S = {'T_24_UZK500.txt';'FWD_T80_UZK500.txt';'T80_UZK700.txt'};
patterns = {'T', 'UZK'};
exp = ['(?<=(', strjoin(patterns,'|') ,'))\d+'];
% Remove all underscores (if any)
S = strrep(S, '_', '');
C = regexp(S, exp, 'match'); % use regexpi() to ignore case
Thanks for your helping!
This solution fit for me.
Using exp as a variable name is not a good idea it would thwart the inbuilt function exp()

Sign in to comment.