Write a function to extracts number between 2 letters?

5 ビュー (過去 30 日間)
Mohammed
Mohammed 2016 年 9 月 7 日
コメント済み: Guillaume 2016 年 9 月 8 日
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 :)

採用された回答

per isakson
per isakson 2016 年 9 月 7 日
編集済み: per isakson 2016 年 9 月 7 日
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 件のコメント
Mohammed
Mohammed 2016 年 9 月 7 日
thank you :) :)
Guillaume
Guillaume 2016 年 9 月 8 日
Note that [sh]{1} is exactly the same as [sh]

サインインしてコメントする。

その他の回答 (2 件)

Walter Roberson
Walter Roberson 2016 年 9 月 7 日
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 2016 年 9 月 7 日
編集済み: Guillaume 2016 年 9 月 7 日
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.
  1 件のコメント
Mohammed
Mohammed 2016 年 9 月 7 日
Thank you Guillaume!

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeCharacters and Strings についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by