Problem using sscanf in picking out numbers from string.
조회 수: 30 (최근 30일)
이전 댓글 표시
So, I have the string:
str1=D993920x2ExlsSuited20.xls
And I want to pick out the numbers in the string, to give me a vector like
res=[993920 2 20]
Allowing me to pick up the last number for use in naming a txt document.
However, I cannot get sscanf to give me this.
I tried using.
res = sscanf(str1, ['%d'])
Shouldn't this give me the numbers in the string at least? All I get is a space sign...
All help on this would be greatly appreciated.
Best regards, Nicki Eriksen.
댓글 수: 0
채택된 답변
Laura Proctor
2013년 12월 2일
The following code should give you results close to what you want:
res = sscanf(str1,'%*[^0123456789]%d')
The idea is that sscanf will try to match all the strings specified, and if it doesn't find a match, then it returns what is found. So, when you use '%d', since the first character in the string is a letter and not a number, it doesn't find a match, and returns nothing.
In the code above, the first element is looking for anything that doesn't match the numbers 0-9. The carat in the beginning indicates a non-match. The asterisk indicates that you don't want to save that information in the output. So, it looks for non-numbers then numbers alternating until the end of the string and only saves the numbers. The documentation for textscan explains it better.
댓글 수: 3
Stephen23
2023년 10월 28일
"...the carat, *, inverts this, so that I am looking for everything not in here. Why is the ^ there?"
You have mixed up the names of the symbols. The caret ^ is used to invert the match inside the square brackets. The asterisk * excludes that data from the output.
추가 답변 (1개)
Walter Roberson
2023년 10월 27일
str1 = 'D993920x2ExlsSuited20.xls';
%method 1
res = str2double(regexp(str1, '\d+', 'match'))
%method 2
res = double(extract(string(str1), digitsPattern))
참고 항목
카테고리
Help Center 및 File Exchange에서 Large Files and Big Data에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!