Write a function to extracts number between 2 letters?

5 vues (au cours des 30 derniers jours)
Mohammed
Mohammed le 7 Sep 2016
Commenté : Guillaume le 8 Sep 2016
I am trying to write a MATLAB code that extracts a 3 digit number in between two letters. the tricky part is that the letter after the number could be either (s)or(h)
E.g 1 the filename is 'rfc_f123sars.tif' this should extract 123 which is between _f and s E.g 2 the filename is 'rfc_f456hars.tif' this should extract 456 which is between _f and h Thanks :)

Réponse acceptée

per isakson
per isakson le 7 Sep 2016
Modifié(e) : per isakson le 7 Sep 2016
Without comments
>> str = 'rfc_f123sars.tif' ;
>> regexp( str, '(?<=_f)\d{3}(?=[sh]{1})', 'match', 'once' )
ans =
123
and slightly different; replace [sh]{1} by (s|h), which is a tiny bit cleaner
>> str = 'rfc_f456hars.tif';
>> regexp( str, '(?<=_f)\d{3}(?=(s|h))', 'match', 'once' )
ans =
456
If regexp returns empty set out=0
  4 commentaires
Mohammed
Mohammed le 7 Sep 2016
thank you :) :)
Guillaume
Guillaume le 8 Sep 2016
Note that [sh]{1} is exactly the same as [sh]

Connectez-vous pour commenter.

Plus de réponses (2)

Walter Roberson
Walter Roberson le 7 Sep 2016
regexp(filename, '\d\d\d', 'match')
or if you want to be more secure,
regexp(filename, '(?<=[A-Za-z])\d\d\d(?=[A-Za-z])', 'match')

Guillaume
Guillaume le 7 Sep 2016
Modifié(e) : Guillaume le 7 Sep 2016
This is trivial with a regular expression:
nstr = regexp(filename, '(?<=_f)\d+(?=(s|h))', 'match', 'once');
if isempty(nstr)
n = 0;
else
n = str2double(nstr);
end
The regular expression matches a sequence of one or more digit, preceded by _f, followed by h or s.

Catégories

En savoir plus sur Characters and Strings dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by