簡體   English   中英

如何從Matlab的字符串中獲取幾個數字

[英]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文檔相當全面,應足以幫助解決此問題。

正如其他人所評論的那樣,這里有幾個問題需要回答,以便為您的問題提供全面的答案:

  1. 到目前為止,您嘗試過哪種代碼僅產生第一個數字? 如@ michael_0815所言,最簡單的正則表達式調用將返回字符串中所有數字的索引。
  2. 您對數字的標准是什么? 特別是在您的第三個字符串中,您說只有3個時有4個數字組。您是否只希望最大2位數字的分組? 這會影響正則表達式的結構。

同時,這應該返回您使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM