文字列パターン
StringReplaceのような文字列操作関数には,文字通りの文字列だけでなく,文字列の集合を表すパターンも扱えるという重要な機能がある.
| Out[1]= |  |
|
| Out[2]= |  |
|
文字列パターンは,通常の文字列と
Mathematica の記号的なパターンオブジェクトが混ざった「文字列式」を使って指定することができる.
文字列式
これは文字列 abに任意の単一文字が続く文字列式を表す.
| Out[3]= |  |
|
これは,この文字列パターンがあるごとに置き換える.
| Out[4]= |  |
|
| StringMatchQ["s",patt] | "s" がpatt にマッチするかどうかテストする |
| StringFreeQ["s",patt] | "s" がpatt にマッチする部分文字列がないかどうかテストする |
| StringCases["s",patt] | patt にマッチする"s" の部分文字列のリストを与える |
| StringCases["s",lhs->rhs] | lhs があるごとにrhs で置換する |
| StringPosition["s",patt] | patt にマッチする文字列の位置のリストを与える |
| StringCount["s",patt] | patt にマッチする部分文字列がいくつあるか数える |
| StringReplace["s",lhs->rhs] | lhs にマッチするすべての部分文字列を置換する |
| StringReplaceList["s",lhs->rhs] |
| lhs を置換するすべての方法のリストを与える |
| StringSplit["s",patt] | patt にマッチするすべての部分文字列のところでs を分割する |
| StringSplit["s",lhs->rhs] | lhs の位置で区切り,代りにrhs を挿入する |
文字列パターンをサポートする関数
これは,文字列に現れるこのパターンのすべてを返す.
| Out[5]= |  |
|
これは, "ab"文字列の後に現れる各文字を与える.
| Out[6]= |  |
|
| Out[7]= |  |
|
文字列パターンでは,すべての標準的な
Mathematica のパターンオブジェクトが使用できる.単一ブランク(
_)は常に単一文字を表す.2重ブランク(
__)は1つまたはそれ以上の連続した文字を表す.
| Out[8]= |  |
|
2重のブランク( __)は1つまたはそれ以上の任意の文字の連続を表す.
| Out[9]= |  |
|
3重のブランク( ___)は零個または1つ以上の文字の連続を表す.
| Out[10]= |  |
|
| "string" | 文字通りの文字の列 |
| _ | 任意の単一文字 |
| __ | 1つ以上の文字を持った任意の文字列 |
| ___ | 零個あるいは1つ以上の文字を持つ任意の文字列 |
| x_, x__, x___ | x という名前を与えられた部分文字列 |
| x:pattern | x という名前を与えられた部分文字列 |
| pattern.. | 1回以上繰り返されたパターン |
| pattern... | 繰り返された,あるいは繰り返されなかったパターン |
| {patt1,patt2,...} or patt1|patt2|... |
| 少なくともpatti のひとつにマッチするパターン |
| patt/;cond | cond を評価するとTrueになるパターン |
| pattern?test | 各文字についてのtest がTrueを返すパターン |
| Whitespace | 一連の空白文字 |
| NumberString | 数の文字 |
| charobj | 文字のクラスを表すオブジェクト(以下参照) |
| RegularExpression["regexp"] | 正規表現にマッチする部分文字列 |
文字列パターンのオブジェクト
これは,コロンまたはセミコロンのところで分割する.
| Out[11]= |  |
|
| Out[12]= |  |
|
| Out[13]= |  |
|
Characters["c1c2..."]や
CharacterRange["c1", "c2"]のような標準的な
Mathematica の構文を使って文字列パターンで使う代替文字のリストを生成することができる.
| Out[14]= |  |
|
| Out[15]= |  |
|
これは "A"から "H"までの間にある文字を与える.
| Out[16]= |  |
|
可能な文字のクラスを指定することに加え,
Mathematica は次のように文字列パターン中の可能な文字のクラスを記号的に指定する方法を提供している.
文字クラスの指定
| Out[17]= |  |
|
| Out[18]= |  |
|
これは1つあるいは2つ以上連続した数字をすべて取り出す.
| Out[19]= |  |
|
Out[20]//InputForm= |
| |  |
|
| Out[21]= |  |
|
文字列パターンは,よく一連のテキストデータから構造を取り出す方法として使われる.これは一般に,文字列パターンの異なる部分を構造の異なる部分に対応する部分文字列にマッチさせることで行われる.
| Out[22]= |  |
|
| Out[23]= |  |
|
| Out[24]= |  |
|
| Out[25]= |  |
|
多くの場合,テキストデータはスペース,改行,タブを含んでいる.これらは「空白文字」とみなされるべきであるが,往々にして無視される.では,,そのような文字列は
Whitespaceで表される.
| Out[26]= |  |
|
これはスペースが連続するたびに,これを単一のコンマで置換する.
| Out[27]= |  |
|
通常文字列パターンは,指定の文字列の任意の位置の部分文字列に適用される.しかしときによっては,特定の位置の部分文字列のみにパターンを適用するように指定できると便利なこともある.そのような場合は,
StartOfStringのような記号を文字列パターンに含めるとよい.
文字列中の特別な位置を表す構文
これは, "a"が文字列のどこに現れてもこれを置換する.
| Out[28]= |  |
|
これは, "a"が文字列の先頭に現れた場合にのみこれを置換する.
| Out[29]= |  |
|
| Out[30]= |  |
|
これは,前後に単語の境界がある場合にのみ置換する.
| Out[31]= |  |
|
文字列パターンは,通常の
Mathematica のパターンのように,
/;と同類のものやこの他の条件を許容する.
| Out[32]= |  |
|
文字列パターンで
x__あるいは
e..のようなオブジェクトを与えると,通常
Mathematica は可能な文字列のうちでマッチする最長のものが要求されていると解釈する.しかし,場合によっては可能な文字列のうちでマッチする最短のものがほしい場合もある.そのような場合は
Shortest[p]を使って指定することができる.
最長と最短のマッチを表すオブジェクト
デフォルトにより,文字列パターンはマッチする可能な文字列の中で最長のものを求める.
| Out[33]= |  |
|
| Out[34]= |  |
|
Mathematica はデフォルトにより文字
"X"と文字
"x"異なるものとして扱う.しかし,文字列操作の
IgnoreCase->Trueオプションを設定することで,
Mathematica にこのような大文字と小文字を等しいものとして扱うように指示することができる.
大文字小文字を無視した文字列操作の指定
これは,すべての "the"を大文字小文字に関わらず置換する.
| Out[35]= |  |
|
文字列操作によっては,部分文字列の重複を含めるかどうかを指定しなければならないことがある.デフォルトの
StringCasesと
StringCountでは重複は含まれないが,
StringPositionは重複を含む.
これは,デフォルトで重複は除きながら連続する文字のペアを拾い出す.
| Out[36]= |  |
|
| Out[37]= |  |
|
| Out[38]= |  |
|
文字列中の重複の操作に関するオプション
| Out[39]= |  |
|
| Out[40]= |  |
|
| Out[41]= |  |
|