Does MATLAB require a 2nd REGEXP to match data values obtained from a previous REGEXP?
1 次查看(过去 30 天)
显示 更早的评论
I've got a set of commands that look like this:
str = 'Part ID: 1 or Part ID: 2 or Part ID: 5 or Part ID: 10';
exp = '*?Part ID:\s+(\d+)';
tokens = regexp(str, exp, 'tokens');
Part_data = reshape(str2double([tokens{:}]), 1, []).'
The objective of the code is to match only Part ID values 2 and 5. MATLAB is easily extracting all 4 part IDs with the commands above. However, I can't get MATLAB to read ONLY values 2 and 5.
I've been seearching Mathworks and using the MATLAB documentation in hopes of answering the following question: Does MATLAB require a 2nd REGEXP to match data values obtained from a previous REGEXP? Or am I making this harder than it is?
2 个评论
Ken Atwell
2013-5-24
What is it that makes values 2 and 5 different/special ("keepers") from 1 and 10 ("non-keepers")?
采纳的回答
Walter Roberson
2013-5-24
exp = 'Part ID:\s+([25])\W';
The expression will match as many times as needed
更多回答(1 个)
James Kristoff
2013-5-24
The quick solution to the objected you stated is to use a more specific regular expression, i.e. if you only want the values 2 and 5:
exp = '*?Part ID:\s+([2|5])';
The real question is:
- what is the actual motivation behind your question?
Meaning, if you just always want to get 2 and 5, then why not have a static vector of 2 and 5.
- What makes 2 and 5 special/different from 1 and 10?
It is that difference or uniqueness that you should use to isolate the values you want in a more generic algorithm.
2 个评论
Walter Roberson
2013-5-24
[2|5] means "2" or "|" or "5", not "2" or "5". [25] already means "2" or "5"
James Kristoff
2013-5-24
Also, a cleaner way of creating a vector of doubles from a cell array is to use the cellfun command, e.g.
Part_data = cellfun(@(str)str2double(str), tokens)
另请参阅
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!