Write a function to extracts number between 2 letters?

3 Ansichten (letzte 30 Tage)
Mohammed
Mohammed am 7 Sep. 2016
Kommentiert: Guillaume am 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 :)

Akzeptierte Antwort

per isakson
per isakson am 7 Sep. 2016
Bearbeitet: per isakson am 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 Kommentare
Mohammed
Mohammed am 7 Sep. 2016
thank you :) :)
Guillaume
Guillaume am 8 Sep. 2016
Note that [sh]{1} is exactly the same as [sh]

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Walter Roberson
Walter Roberson am 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 am 7 Sep. 2016
Bearbeitet: Guillaume am 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.

Kategorien

Mehr zu Characters and Strings finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by