文字列パターン

StringReplaceのような文字列操作関数には,文字通りの文字列だけでなく,文字列の集合を表すパターンも扱えるという重要な機能がある.

これはまたはで置換する.
In[1]:=
Click for copyable input
Out[1]=
これは,任意の文字をで置換する.
In[2]:=
Click for copyable input
Out[2]=

文字列パターンは,通常の文字列とWolfram言語の記号的なパターンオブジェクトが混ざった「文字列式」を使って指定することができる.

s1~~s2~~ または StringExpression[s1,s2,]
一連の文字列とパターンオブジェクト

文字列式

これは文字列に任意の単一文字が続く文字列式を表す.
In[3]:=
Click for copyable input
Out[3]=
これは,この文字列パターンがあるごとに置き換える.
In[4]:=
Click for copyable input
Out[4]=
StringMatchQ["s",patt]patt にマッチするかどうかテストする
StringFreeQ["s",patt]patt にマッチする部分文字列がないかどうかテストする
StringCases["s",patt]patt にマッチするの部分文字列のリストを与える
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 を挿入する

文字列パターンをサポートする関数

これは,文字列に現れるこのパターンのすべてを返す.
In[5]:=
Click for copyable input
Out[5]=
これは,文字列の後に現れる各文字を与える.
In[6]:=
Click for copyable input
Out[6]=
これは,文字列中の同一文字ペアすべてを与える.
In[7]:=
Click for copyable input
Out[7]=

文字列パターンでは,すべての標準的なWolfram言語のパターンオブジェクトが使用できる.単一ブランク()は常に単一文字を表す.二重ブランク()は1つまたはそれ以上の連続した文字を表す.

単一のブランク()は任意の1文字を表す.
In[8]:=
Click for copyable input
Out[8]=
二重のブランク()は1つまたはそれ以上の任意の文字の連続を表す.
In[9]:=
Click for copyable input
Out[9]=
三重のブランク()は零個または1つ以上の文字の連続を表す.
In[10]:=
Click for copyable input
Out[10]=
"string"文字通りの文字の列
_任意の単一文字
__1つ以上の文字を持った任意の文字列
___零個あるいは1つ以上の文字を持つ任意の文字列
x_, x__, x___x という名前を与えられた部分文字列
x:patternx という名前を与えられた部分文字列
pattern..1回以上繰り返されたパターン
pattern...繰り返された,あるいは繰り返されなかったパターン
{patt1,patt2,} または patt1|patt2|少なくとも のひとつにマッチするパターン
patt/;condcond を評価するとTrueになるパターン
pattern?test各文字についての testTrueを返すパターン
Whitespace一連の空白文字
NumberString数の文字
charobj文字のクラスを表すオブジェクト(以下参照)
RegularExpression["regexp"]正規表現にマッチする部分文字列

文字列パターンのオブジェクト

これは,コロンまたはセミコロンのところで分割する.
In[11]:=
Click for copyable input
Out[11]=
これは,またはのみの連続を求める.
In[12]:=
Click for copyable input
Out[12]=
代替物が文字列パターンのリストで与えられる.
In[13]:=
Click for copyable input
Out[13]=

Characters["c1c2"]CharacterRange["c1","c2"]のような標準的なWolfram言語の構文を使って文字列パターンで使う代替文字のリストを生成することができる.

これで文字のリストが与えられる.
In[14]:=
Click for copyable input
Out[14]=
これで母音文字が置換される.
In[15]:=
Click for copyable input
Out[15]=
これはからまでの間にある文字を与える.
In[16]:=
Click for copyable input
Out[16]=

可能な文字のクラスを指定することに加え,Wolfram言語は次のように文字列パターン中の可能な文字のクラスを記号的に指定する方法を提供している.

{"c1","c2",}任意の
Characters["c1c2"]任意の
CharacterRange["c1","c2"]からの範囲に含まれる任意の文字
DigitCharacter0から9までの数字
LetterCharacter文字
WhitespaceCharacterスペース,改行,タブあるいはその他の空白文字
WordCharacter文字あるいは数字
Except[p]p にマッチするもの以外の任意の文字

文字クラスの指定

これは文字列中の数字を取り出す.
In[17]:=
Click for copyable input
Out[17]=
これは数字以外のすべての文字を取り出す.
In[18]:=
Click for copyable input
Out[18]=
これは1つあるいは2つ以上連続した数字をすべて取り出す.
In[19]:=
Click for copyable input
Out[19]=
結果は文字列である.
In[20]:=
Click for copyable input
Out[20]//InputForm=
これは上記の文字列を数字に変換する.
In[21]:=
Click for copyable input
Out[21]=

文字列パターンは,よく一連のテキストデータから構造を取り出す方法として使われる.これは一般に,文字列パターンの異なる部分を構造の異なる部分に対応する部分文字列にマッチさせることで行われる.

これは,に数字が続いたものを取り出す.
In[22]:=
Click for copyable input
Out[22]=
これは数字のみを与える.
In[23]:=
Click for copyable input
Out[23]=
これは「変数」と「値」を文字列から抽出する.
In[24]:=
Click for copyable input
Out[24]=
ToExpressionがこれらを通常の記号と数字に変換する.
In[25]:=
Click for copyable input
Out[25]=

多くの場合,テキストデータはスペース,改行,タブを含んでいる.これらは「空白文字」とみなされるべきであるが,往々にして無視される.では,,そのような文字列はWhitespaceで表される.

これは,すべての空白文字を文字列から取り除く.
In[26]:=
Click for copyable input
Out[26]=
これはスペースが連続するたびに,これを単一のコンマで置換する.
In[27]:=
Click for copyable input
Out[27]=

通常文字列パターンは,指定の文字列の任意の位置の部分文字列に適用される.しかしときによっては,特定の位置の部分文字列のみにパターンを適用するように指定できると便利なこともある.そのような場合は,StartOfStringのような記号を文字列パターンに含めるとよい.

StartOfString文字列全体の先頭
EndOfString文字列全体の末尾
StartOfLine行頭
EndOfLine行末
WordBoundary単語文字とそれ以外の境界
Except[StartOfString]単語の境界StartOfString等以外の任意の場所

文字列中の特別な位置を表す構文

これは,が文字列のどこに現れてもこれを置換する.
In[28]:=
Click for copyable input
Out[28]=
これは,が文字列の先頭に現れた場合にのみこれを置換する.
In[29]:=
Click for copyable input
Out[29]=
これは部分文字列をすべて置換する.
In[30]:=
Click for copyable input
Out[30]=
これは,前後に単語の境界がある場合にのみ置換する.
In[31]:=
Click for copyable input
Out[31]=

文字列パターンは,通常のWolfram言語のパターンのように,と同類のものやこの他の条件を許容する.

これは,文字列中で異なる文字が続く場合を与える.
In[32]:=
Click for copyable input
Out[32]=

文字列パターンであるいはe..のようなオブジェクトを与えると,通常Wolfram言語は可能な文字列のうちでマッチする最長のものが要求されていると解釈する.しかし,場合によっては可能な文字列のうちでマッチする最短のものがほしい場合もある.そのような場合はShortest[p]を使って指定することができる.

Longest[p]p にマッチする最長のもの(デフォルト)
Shortest[p]p にマッチする最短のもの 

最長と最短のマッチを表すオブジェクト

デフォルトにより,文字列パターンはマッチする可能な文字列の中で最長のものを求める.
In[33]:=
Click for copyable input
Out[33]=
Shortestは,その代りにマッチする最短のものを求めるように指定する.
In[34]:=
Click for copyable input
Out[34]=

Wolfram言語はデフォルトにより文字と文字異なるものとして扱う.しかし,文字列操作のIgnoreCase->Trueオプションを設定することで,Wolfram言語にこのような大文字と小文字を等しいものとして扱うように指示することができる.

IgnoreCase->True大文字と小文字を等しいものとして扱う

大文字小文字を無視した文字列操作の指定

これは,すべてのを大文字小文字に関わらず置換する.
In[35]:=
Click for copyable input
Out[35]=

文字列操作によっては,部分文字列の重複を含めるかどうかを指定しなければならないことがある.デフォルトのStringCasesStringCountでは重複は含まれないが,StringPositionは重複を含む.

これは,デフォルトで重複は除きながら連続する文字のペアを拾い出す.
In[36]:=
Click for copyable input
Out[36]=
こちらは重複も含める.
In[37]:=
Click for copyable input
Out[37]=
StringPositionは,デフォルトで重複を含む.
In[38]:=
Click for copyable input
Out[38]=
Overlaps->Allすべての重複を含む
Overlaps->True各位置から初めて少なくともひとつの重複を含む
Overlaps->Falseすべての重複を除く

文字列中の重複の操作に関するオプション

これは1つのマッチした返さない.
In[39]:=
Click for copyable input
Out[39]=
これは重複するマッチを連続して返す.
In[40]:=
Click for copyable input
Out[40]=
これは可能なすべての重複するマッチを含む.
In[41]:=
Click for copyable input
Out[41]=