[英]how to get several numbers from a string in matlab
我正在努力從幾個字符串中提取數字:
'L/22P/93'
'P/8P/48L/3'
'1L/63P/751' (this one is: 1, 63, 75, 1)
'PL/18'
'P/30P/5'
'PP'
我想獲取所有數字,因此可以使用它們進行計算。
我嘗試使用regexp,但是我只能獲得每個字符串的第一個數字。
一種簡單的方法是將所有其他字符替換為空格,然后讀取字符串:
function nums = read_numbers(str)
%// This works only for integer numbers without sign
not_digit = (str < '0') | (str > '9');
str(not_digit) = ' ';
nums = sscanf(str, '%u');
end
就像評論所說,該函數不考慮科學符號中的符號(+/-),小數點或實數。
將上面的代碼保存在文件read_numbers.m
,可以像下面的示例一樣使用它:
>> read_numbers('L/22P/93');
22
93
盡管正則表達式可能會令人生畏,但MATLAB的regex
文檔相當全面,應足以幫助解決此問題。
正如其他人所評論的那樣,這里有幾個問題需要回答,以便為您的問題提供全面的答案:
同時,這應該返回您使用regex
請求的內容,盡管它假設您的數字是無符號整數,並且您希望最大2位數字的分組。
teststr = '1L/63P/751';
test = str2double(regexp(teststr, '\d{1,2}', 'match'));
它返回以下數組:
test =
1 63 75 1
我建議與在線正則表達式測試儀一起玩,看看您的輸入如何影響結果。 我最喜歡的是regex101 。 它適用於其他語言,但是MATLAB語法在大多數情況下足夠相似。
讓您將數據定義為字符串的單元格數組:
s = {'L/22P/93'
'P/8P/48L/3'
'1L/63P/751'
'PL/18'
'P/30P/5'
'PP'};
然后
y = regexp(s, '\d+', 'match'); %// cell array of cell arrays of strings
y = cellfun(@str2double, y, 'uniformoutput', 0); %// convert to cell array of vectors
給出結果作為向量的單元格數組:
y{1} =
22 93
y{2} =
8 48 3
y{3} =
1 63 751
y{4} =
18
y{5} =
30 5
y{6} =
[]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.