ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

strsplit

指定した区切り記号で string または文字ベクトルを分割

説明

C = strsplit(str) は、str を空白のある箇所で分割して C に出力します。空白文字は、{' ','\f','\n','\r','\t','\v'} セットの任意のシーケンスと同等です。

str に連続する空白文字がある場合、strsplit ではそれらを 1 つの空白として扱います。

C = strsplit(str,delimiter) は、delimiter によって指定された区切り記号で str を分割します。

str に連続する区切り記号があり、それらの間に他の文字がない場合、strsplit はそれらを 1 つの区切り文字として扱います。たとえば、strsplit('Hello,world',',')strsplit('Hello,,,world',',') はどちらも同じ出力を返します。

C = strsplit(str,delimiter,Name,Value) は、1 つ以上の名前と値のペアの引数を使用して追加の区切り記号オプションを指定します。たとえば、連続する区切り文字を個別の区切り記号として扱うには、'CollapseDelimiters',false を指定できます。

[C,matches] = strsplit(___) は、さらに配列 matches も返します。matches 出力引数には、strsplitstr を分割する区切り記号のすべての出現が含まれます。この構文では、前述の構文の入力引数のいずれかを使用できます。

すべて折りたたむ

str = 'The rain in Spain.';
C = strsplit(str)
C = 1x4 cell array
    {'The'}    {'rain'}    {'in'}    {'Spain.'}

C は 4 つの文字ベクトルを含む cell 配列です。

コンマ区切り値を格納した文字ベクトルを分割します。

data = '1.21, 1.985, 1.955, 2.015, 1.885';
C = strsplit(data,', ')
C = 1x5 cell array
    {'1.21'}    {'1.985'}    {'1.955'}    {'2.015'}    {'1.885'}

文字ベクトル data を分割します。この文字ベクトルには、単位 m/s と、そのテキストの両側に任意の数の空白が含まれています。正規表現 \s* は、0 回以上発生する任意の空白文字と一致します。

data = '1.21m/s1.985m/s 1.955 m/s2.015 m/s 1.885m/s';
[C,matches] = strsplit(data,'\s*m/s\s*',...
    'DelimiterType','RegularExpression')
C = 1x6 cell array
    {'1.21'}    {'1.985'}    {'1.955'}    {'2.015'}    {'1.885'}    {0x0 char}

matches = 1x5 cell array
    {'m/s'}    {'m/s '}    {' m/s'}    {' m/s '}    {'m/s'}

この場合、C の最後の文字ベクトルは空です。この空の文字ベクトルは、最後に一致した区切り記号の後に続きます。

myPath = 'C:\work\matlab';
C = strsplit(myPath,'\')
C = 1x3 cell array
    {'C:'}    {'work'}    {'matlab'}

複数の区切り記号を 1 つとして扱って、' ''ain' で文字ベクトルを分割します。文字ベクトルの cell 配列に複数の区切り記号を指定します。

str = 'The rain in Spain stays mainly in the plain.';
[C,matches] = strsplit(str,{' ','ain'},'CollapseDelimiters',true)
C = 1x11 cell array
  Columns 1 through 7

    {'The'}    {'r'}    {'in'}    {'Sp'}    {'stays'}    {'m'}    {'ly'}

  Columns 8 through 11

    {'in'}    {'the'}    {'pl'}    {'.'}

matches = 1x10 cell array
  Columns 1 through 7

    {' '}    {'ain '}    {' '}    {'ain '}    {' '}    {'ain'}    {' '}

  Columns 8 through 10

    {' '}    {' '}    {'ain'}

正規表現を使用し、複数の区切り記号を個別に扱って、同じ文字ベクトルを空白と 'ain' で分割します。

[C,matches] = strsplit(str,{'\s','ain'},'CollapseDelimiters',...
    false, 'DelimiterType','RegularExpression')
C = 1x13 cell array
  Columns 1 through 6

    {'The'}    {'r'}    {0x0 char}    {'in'}    {'Sp'}    {0x0 char}

  Columns 7 through 13

    {'stays'}    {'m'}    {'ly'}    {'in'}    {'the'}    {'pl'}    {'.'}

matches = 1x12 cell array
  Columns 1 through 8

    {' '}    {'ain'}    {' '}    {' '}    {'ain'}    {' '}    {' '}    {'ain'}

  Columns 9 through 12

    {' '}    {' '}    {' '}    {'ain'}

この場合、strsplit は 2 つの区切り記号を個別に扱うため、出力 C の連続して一致する区切り記号の間に空の文字ベクトルが現れます。

文字ベクトル ', ' および ', and ' でテキストを分割します。

str = 'bacon, lettuce, and tomato';
[C,matches] = strsplit(str,{', ',', and '})
C = 1x3 cell array
    {'bacon'}    {'lettuce'}    {'and tomato'}

matches = 1x2 cell array
    {', '}    {', '}

このコマンドでは ', ' が最初にリストされ、', and '', ' が含まれているため、関数 strsplit は最初の区切り記号で str を分割し、2 番目の区切り記号には進みません。

区切り記号の順序を逆にすると、', and ' が優先されます。

str = 'bacon, lettuce, and tomato';
[C,matches] = strsplit(str,{', and ',', '})
C = 1x3 cell array
    {'bacon'}    {'lettuce'}    {'tomato'}

matches = 1x2 cell array
    {', '}    {', and '}

入力引数

すべて折りたたむ

入力テキスト。文字ベクトルまたは string スカラーとして指定します。

データ型: char | string

区切り記号。文字ベクトル、1n 列の文字ベクトルの cell 配列、または 1n 列の string 配列として指定します。delimiter で指定されたテキストは、出力 C に表示されません。

複数の区切り記号は、cell 配列または string 配列内に指定します。関数 strsplitstrdelimiter の要素で分割します。delimiter での区切り記号の出現順序が重要となるのは、複数の区切り記号の始まりが str 内の同じ文字に一致する場合のみです。そのような場合、strsplitdelimiter 内の最初に一致する区切り記号で文字列を分割します。

delimiter には、以下のエスケープ シーケンスを含めることができます。

\\

バックスラッシュ

\0

ヌル

\a

アラーム

\b

バックスペース

\f

フォーム フィード

\n

改行

\r

キャリッジ リターン

\t

水平タブ

\v

垂直タブ

例: ','

例: {'-',','}

データ型: char | cell | string

名前と値のペアの引数

オプションの Name,Value の引数ペアをコンマ区切りで指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順序で指定できます。

例: 'DelimiterType','RegularExpression'strsplitdelimiter を正規表現として扱うように指示します。

複数の区切り記号の取り扱いは、'CollapseDelimiters'true または false で構成されるコンマ区切りのペアとして指定します。true の場合、str 内の連続した区切り記号は 1 つの区切り記号として扱われます。false の場合、連続した区切り記号は個別の区切り記号として扱われるため、一致する区切り記号の間は空の文字ベクトル '' 要素になります。

例: 'CollapseDelimiters',true

区切り記号の種類。'DelimiterType' と次の文字ベクトルのいずれかで構成されるコンマ区切りのペアとして指定します。

'Simple'strsplit は、エスケープ シーケンスを除く delimiter をリテラル テキストとして扱います。
'RegularExpression'strsplitdelimiter を正規表現として扱います。

いずれの場合も、delimiter にはエスケープ シーケンスを含めることができます。

出力引数

すべて折りたたむ

元の文字ベクトルの一部。文字ベクトルの cell 配列または string 配列として返されます。C の要素数は、常に matches に含まれる要素数より 1 つ多くなります。したがって、str が区切り記号で始まる場合、C の最初の要素には文字が含まれません。str が区切り記号で終わる場合、C の最後のセルには文字が含まれません。

指定された区切り記号。文字ベクトルの cell 配列または string 配列として返されます。matches の要素数は、常に出力 C に含まれる要素数より 1 つ少なくなります。str が文字ベクトルまたは文字ベクトルの cell 配列の場合、matches は cell 配列です。str が string 配列の場合、matches は string 配列です。

ヒント

  • R2016b 以降、string 配列の要素を分割するには関数 split を使用することを推奨します。

参考

| | |

トピック

R2013a で導入