Main Content

split

区切り記号での string の分割

説明

newStr = split(str)str を空白文字の位置で分割し、結果を出力配列 newStr として返します。入力配列 str には、string 配列、文字ベクトル、文字ベクトルの cell 配列を指定できます。str が string 配列の場合、newStr も string 配列です。それ以外の場合、newStr は文字ベクトルの cell 配列です。newStr には str の空白文字は含まれません。

str が string 配列または文字ベクトルの cell 配列で、複数の要素をもつ場合、各要素は同じ数の部分文字列に分割可能でなければなりません。

  • str が string スカラーまたは文字ベクトルの場合、newStrN1 列の string 配列または文字ベクトルの cell 配列 (N は部分文字列の数) です。

  • strM1 列の string 配列または cell 配列の場合、newStrMN 列の配列となります。

  • str1M 列の string 配列または cell 配列の場合、newStr1×M×N の配列となります。

任意のサイズの string 配列または cell 配列について、splitN 個の部分文字列を、サイズが 1 である最初の後続次元に沿って配置します。

str のすべての要素で部分文字列の数が同じではない場合、for ループで split を呼び出して、str の要素を一度に 1 つずつ分割します。

newStr = split(str,delimiter) は、delimiter で指定した区切り記号で str の各要素を分割します。出力 newStr は区切り記号を含みません。

newStr = split(str,delimiter,dim) は、str の各要素を dim で指定された次元に沿ってベクトルに分割します。

[newStr,match] = split(___) は、配列 match も返します。これには関数 splitstr を分割する区切り記号のすべての出現箇所が含まれます。この構文では、前述の構文の入力引数のいずれかを使用できます。

すべて折りたたむ

string 配列内の名前を空白文字の位置で分割します。姓が名の前になるように、string を並べ替えてから結合します。

名前を含む 3 行 1 列の string 配列を作成します。

names = ["Mary Butler";
         "Santiago Marquez";
         "Diana Lee"]
names = 3x1 string
    "Mary Butler"
    "Santiago Marquez"
    "Diana Lee"

names を空白文字の位置で分割し、3 行 2 列の string 配列にします。

names = split(names)
names = 3x2 string
    "Mary"        "Butler" 
    "Santiago"    "Marquez"
    "Diana"       "Lee"    

姓が最初の列になるように、names の列を切り替えます。それぞれの姓の後にコンマを追加します。

names = [names(:,2) names(:,1)];
names(:,1) = names(:,1) + ','
names = 3x2 string
    "Butler,"     "Mary"    
    "Marquez,"    "Santiago"
    "Lee,"        "Diana"   

姓と名を結合します。関数 join は、結合する string の間に空白文字を配置します。結合後、names は 3 行 1 列の string 配列になります。

names = join(names)
names = 3x1 string
    "Butler, Mary"
    "Marquez, Santiago"
    "Lee, Diana"

フォルダーのパスを含む string を作成します。

myPath = "/Users/jdoe/My Documents/Examples"
myPath = 
"/Users/jdoe/My Documents/Examples"

パスを / 文字の位置で分割します。splitmyFolders を 5 行 1 列の string 配列として返します。最初の string は "" です。これは、myPath/ 文字で始まるためです。

myFolders = split(myPath,"/")
myFolders = 5x1 string
    ""
    "Users"
    "jdoe"
    "My Documents"
    "Examples"

\ を区切り記号として myFolders を新しいパスに結合します。パスの始めとして C: を追加します。

myNewPath = join(myFolders,"\");
myNewPath = 'C:' + myNewPath
myNewPath = 
"C:\Users\jdoe\My Documents\Examples"

R2020b 以降

テキストを区切り記号として扱うことで、文字列から数値を取得します。テキストに一致するパターンを使用します。次に、数値を加算します。

最初に、数値が含まれる文字列を作成します。

str = "10 apples 3 bananas and 5 oranges"
str = 
"10 apples 3 bananas and 5 oranges"

次に、空白文字または文字に一致するパターンを作成します。

pat = " " | lettersPattern
pat = pattern
  Matching:

    " " | lettersPattern

pat を区切り記号として使用して文字列を分割します。空の文字列は、空白と文字のシーケンスの間で分割されていて、その間には何もないことを表します。たとえば、"10 apples" では、区切り記号 " " の前、つまり " ""apples" の間に分割があります。区切り記号 " ""apples" の間に何もないため、関数 split は空の string を返して、それらの間に何もないことを示します。

N = split(str,pat)
N = 11x1 string
    "10"
    ""
    ""
    "3"
    ""
    ""
    ""
    ""
    "5"
    ""
    ""

空の string を破棄し、数値を表す部分文字列を保持します。

N = N(strlength(N) > 0)
N = 3x1 string
    "10"
    "3"
    "5"

最後に、N を数値配列に変換し、それを合計します。

N = str2double(N);
sum(N)
ans = 18

pattern オブジェクトを作成する関数の一覧については、patternを参照してください。

string を作成します。

str = "A horse! A horse! My kingdom for a horse!"
str = 
"A horse! A horse! My kingdom for a horse!"

str を感嘆符と空白文字の位置で分割します。newStr は 10 行 1 列の string 配列です。最後の string は空の string "" です。これは、str の最後の文字が区切り記号であるためです。

newStr = split(str,[" ","!"])
newStr = 12x1 string
    "A"
    "horse"
    ""
    "A"
    "horse"
    ""
    "My"
    "kingdom"
    "for"
    "a"
    "horse"
    ""

患者に関するコンマ区切りのデータが各要素に含まれる string 配列を作成します。

patients = ["LastName,Age,Gender,Height,Weight";
            "Adams,47,F,64,123";
            "Jones,,,68,175";
            "King,,M,66,180";
            "Smith,38,F,63,118"]
patients = 5x1 string
    "LastName,Age,Gender,Height,Weight"
    "Adams,47,F,64,123"
    "Jones,,,68,175"
    "King,,M,66,180"
    "Smith,38,F,63,118"

string 配列を分割します。間に何もないコンマのペアは欠損データを示します。split が区切り記号の繰り返し位置で分割を行うと、出力配列の対応する要素に空の string が返されます。

patients = split(patients,",")
patients = 5x5 string
    "LastName"    "Age"    "Gender"    "Height"    "Weight"
    "Adams"       "47"     "F"         "64"        "123"   
    "Jones"       ""       ""          "68"        "175"   
    "King"        ""       "M"         "66"        "180"   
    "Smith"       "38"     "F"         "63"        "118"   

名前を含む 3 行 1 列の string 配列を作成します。

names = ["Mary Butler";
         "Santiago Marquez";
         "Diana Lee"]
names = 3x1 string
    "Mary Butler"
    "Santiago Marquez"
    "Diana Lee"

配列を空白文字の位置で分割します。既定では、split は出力部分文字列をサイズが 1 である最初の後続次元に沿って配置します。names は 3 行 1 列の string 配列なので、split は部分文字列を splitNames の 2 番目の次元 (つまり列) に沿って配置します。

splitNames = split(names)
splitNames = 3x2 string
    "Mary"        "Butler" 
    "Santiago"    "Marquez"
    "Diana"       "Lee"    

部分文字列を行 (つまり最初の次元) に沿って配置するには、区切り記号を指定した後で次元を指定します。splitNames が 2 行 3 列の string 配列になり、1 行目に名、2 行目に姓が含まれます。

splitNames = split(names," ",1)
splitNames = 2x3 string
    "Mary"      "Santiago"    "Diana"
    "Butler"    "Marquez"     "Lee"  

string を作成します。

str = "bacon, lettuce, and tomato"
str = 
"bacon, lettuce, and tomato"

str を区切り記号で分割します。結果を string 配列に返し、区切り記号を 2 つ目の string 配列に返します。連続する区切り記号の間にテキストがない場合、split は空の string を返します。

[newStr,match] = split(str,["and",","," "])
newStr = 7x1 string
    "bacon"
    ""
    "lettuce"
    ""
    ""
    ""
    "tomato"

match = 6x1 string
    ","
    " "
    ","
    " "
    "and"
    " "

関数 joinnewStrmatch を再び結合します。

originalStr = join(newStr,match)
originalStr = 
"bacon, lettuce, and tomato"

入力引数

すべて折りたたむ

入力テキスト。string 配列、文字ベクトルまたは文字ベクトルの cell 配列として指定します。

区切りの部分文字列。次のいずれかとして指定します。

  • string 配列

  • 文字ベクトル

  • 文字ベクトルの cell 配列

  • pattern 配列 "(R2020b 以降)"

delimiter に指定した部分文字列は、出力 newStr に現れません。

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

例: split(str,{' ',',','--'}) は、str を空白、コンマ、および連続するダッシュのペアのある位置で分割します。

文字列を分割する次元。正の整数として指定します。dim が指定されない場合、既定値はサイズが 1 ではない最後の配列次元です。

出力引数

すべて折りたたむ

元の配列から分割された部分文字列。string 配列または文字ベクトルの cell 配列として返されます。入力配列 str が string 配列の場合、newStr も string 配列です。それ以外の場合、newStr は文字ベクトルの cell 配列です。

指定された区切り記号。string 配列または文字ベクトルの cell 配列として返されます。入力配列 str が string 配列の場合、match も string 配列です。それ以外の場合、match は文字ベクトルの cell 配列です。

match の要素の数は常に出力 newStr より 1 つ少なくなります。

拡張機能

バージョン履歴

R2016b で導入