Conditional case on strfind

17 次查看(过去 30 天)
Jacky
Jacky 2014-4-9
Hi all,
I have a problem on with the strfind in matlab:
x =
{
'my height is 160'
'my height is 163'
'my height is 167'
'my height is 180');
feature_1 = find(~cellfun('isempty',strfind(x,'my height is 163')))
the output will be:
feature_1 =
2
Now my problem is how do i find for "my height is > 163" ?
Thanks.

回答(3 个)

dpb
dpb 2014-4-9
Not easily by character matching/searching. You'd need to convert the numeric value strings in the and then do the search on that. SOTOO (warning, air code, untested)...
find(cellfun(@(x) str2double(x(end-3:end)),x)>163)
  1 个评论
Jacky
Jacky 2014-4-10
Thank you so much :), it works! This is checking for the last 3 numbers which are greater than 163 right? How if the x is like this:
x = {'my height is 160'
'my height is 163'
'my height is 167'
'my height = "180"'};
then the last cell cannot be matched because of the quotation marks before and after the number? Any way to solve this?
Thank you.

请先登录,再进行评论。


Azzi Abdelmalek
Azzi Abdelmalek 2014-4-9
编辑:Azzi Abdelmalek 2014-4-10
x ={ 'my height is 160'
'my height is 163'
'my height is 167'
'my height is 180'};
num=regexp(x,'[0-9]+(\.)?[0-9]?','match')
out=x(str2double([num{:}])>163)
  2 个评论
Jacky
Jacky 2014-4-10
编辑:Jacky 2014-4-10
Thanks so much for your reply. I'm also using regular expression to solve this. But, if the x is like this:
x = {'my height is 1'
'my height is 13'
'my height is 5'
'my height = "2"'};
A = find(~cellfun('isempty',regexp(x, 'height = "[0-5]"', 'match')));
B = find(~cellfun('isempty',regexp(x, 'height is [0-5]', 'match')));
The output is:
>> B
B =
1
2
3
>> A
A =
4
The output for B is incorrect, because 'my height is 13' is included, but this is not suppose to included as 13 is not within the range of [0-5]. What is the mistake i made in the regular expression there?
Thank you.
Azzi Abdelmalek
Azzi Abdelmalek 2014-4-10
This is not my answer. don't change [0-9],
num=regexp(x,'[0-9]+(\.)?[0-9]?','match')
a=str2double([num{:}])
The result is
1 13 5 2
Now we find the range 0-5
out=x(a>0 & a<=5 )

请先登录,再进行评论。


Jos (10584)
Jos (10584) 2014-4-10
Approach this in two steps:
Step 1. Convert the strings to a numerical values. This step depends on how the strings are made up. If there is always one and only one value in each string, you can do something like this:
s = regexp(x,'\d+','match')
num = str2double([s{:}])
Step 2. Use logical indexing to get the indices into x
tf = num > 2 & num <= 5 % whatever
indices = find(tf)
result = x(tf)

类别

Help CenterFile Exchange 中查找有关 Characters and Strings 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by