0

私はこのようなセル配列3x1を持っています:

name1 = text1
name2 = text2
name3 = text3

そして、それを1x2の個別のセル、たとえばname1、text1に解析したいと思います。将来的には、text1を他の文字列と比較するための文字列として扱いたいと思います。どうすればいいですか?私は正規表現とトークンを試していますが、そのための適切な式を書くことができません。誰かがそれを手伝ってくれるなら、私は感謝します!

4

1 に答える 1

4

このコード

input = {'name1 = text1';
         'name2 = text2';
         'name3 = text3'};

result = cell(size(input, 1), 2);
for row = 1 : size(input, 1)
    tokens = regexp(input{row}, '(.*)=(.*)', 'tokens');
    if ~isempty(tokens)
        result(row, :) = tokens{1};
    end
end

結果を生み出す

result = 
    'name1 '    ' text1'
    'name2 '    ' text2'
    'name3 '    ' text3'

等号の周りの空白は保持されることに注意してください。正規表現を調整することで、この動作を変更できます'([^\s]+) *= *([^\s]+)'

result = 
    'name1'    'text1'
    'name2'    'text2'
    'name3'    'text3'

編集:user1578163によるコメントに基づいています。

Matlabは、貪欲でない数量詞もサポートしています。たとえば'(.*?) *= *(.*)'、テキストにスペースが含まれている場合、正規表現(アスタリスクの後の疑問符に注意)は機能します。変身します

input = {'my name1 = any text1';
         'your name2 = more text2';
         'her name3 = another text3'};

の中へ

result = 
    'my name1'      'any text1'    
    'your name2'    'more text2'   
    'her name3'     'another text3'
于 2012-08-20T11:31:33.203 に答える