字符串的运算

Mathematica 提供了各种字符串运算函数,这些函数的大部分基本出发点是将字符串当作一个字符序列,许多函数都与列表的运算类似.

s1<>s2<>...StringJoin[{s1,s2,...}] 将几个字符串连接在一起
StringLength[s]给出一个串中的字符数
StringReverse[s]颠倒串中字符的顺序

完全字符串的运算.

可以将任意数目的字符串相连接.
In[1]:=
Click for copyable input
Out[1]=
StringLength 给出串中的字符数.
In[2]:=
Click for copyable input
Out[2]=
StringReverse 颠倒串中的字符.
In[3]:=
Click for copyable input
Out[3]=
StringTake[s,n]s 的前 n 个字符形成字符串
StringTake[s,{n}]取出 s 中的第 n 个字符
StringTake[s,{n1,n2}]取出 的字符
StringDrop[s,n]s 中用截掉前 n 个字符的方式得到字符串
StringDrop[s,{n1,n2}]截掉从 的字符

取出或截掉子串.

字符串处理中的 StringTakeStringDrop 与集合运算中的 TakeDrop 类似. 与 TakeDrop 相似,它们用 Mathematica 标准的排序方式,例如,当n为负数时是从字符串的最后开始计数. 注意,字符串中的第一个字符的位置是 .

这是一个简单的字符串.
In[4]:=
Click for copyable input
Out[4]=
中取出前5个字符.
In[5]:=
Click for copyable input
Out[5]=
中的第5个字符.
In[6]:=
Click for copyable input
Out[6]=
去掉倒数第2到倒数第10个字符.
In[7]:=
Click for copyable input
Out[7]=
StringInsert[s,snew,n]将字符串 snew 插在 s 中的第 n 个位置
StringInsert[s,snew,{n1,n2,...}]将字符串 snew 多次插入 s

在一个字符串中的插入.

StringInsert[s, snew, n] 产生第 n 个字符是 snew 的第一个字符的字符串.

产生一个新字符串,它的第4个位置是 的第一个字符.
In[8]:=
Click for copyable input
Out[8]=
负位置是从字符串的后面计数.
In[9]:=
Click for copyable input
Out[9]=
被重复插入原字符串的指定位置.
In[10]:=
Click for copyable input
Out[10]=
使用 Riffle 在列表中的词间加入空格.
In[11]:=
Click for copyable input
Out[11]=
StringReplacePart[s,snew,{m,n}]用字符串 snew 替换 s 中从 mn 的字符
StringReplacePart[s,snew,{{m1,n1},{m2,n2},...}]snew 多次在 s 中进行替换
StringReplacePart[s,{snew1,snew2,...},{{m1,n1},{m2,n2},...}] 用对应的 替换 s 中的子串

替换字符串的某一部分.

替换从2到6的字符.
In[12]:=
Click for copyable input
Out[12]=
用字符串 进行了两次替换.
In[13]:=
Click for copyable input
Out[13]=
用不同的字符串进行了两次替换.
In[14]:=
Click for copyable input
Out[14]=
StringPosition[s,sub]给出 s 中子串 sub 出现的起始和结束位置的列表
StringPosition[s,sub,k]仅给出 ssubk 次出现的位置列表
StringPosition[s,{sub1,sub2,...}]给出 中任一个出现的位置

找出子字符串的位置.

StringPosition 能给出一个字符串中一个子串出现的位置. StringPosition 的返回值是一个列表,列表中的每一个元素对应于子串的一次出现,它指出了子串的起始和结束位置. 这些列表的形式与 StringTakeStringDropStringReplacePart 中的形式一致.

这里给出子串 出现位置的列表.
In[15]:=
Click for copyable input
Out[15]=
这里仅给出第一个 出现的位置.
In[16]:=
Click for copyable input
Out[16]=
这里给出了字符串 出现的位置. 默认地,它们在位置上有重叠.
In[17]:=
Click for copyable input
Out[17]=
这里没有包括重叠.
In[18]:=
Click for copyable input
Out[18]=
StringCount[s,sub]计算在 ssub 的出现次数
StringCount[s,{sub1,sub2,...}]计算任意 出现的次数
StringFreeQ[s,sub]检测 s 是否不包括 sub
StringFreeQ[s,{sub1,sub2,...}]检测 s 是否不包括所有

子串的检测.

这里计算任一子串的出现次数,默认地,不包括重叠.
In[19]:=
Click for copyable input
Out[19]=
StringReplace[s,sb->sbnew]s 中用 sbnew 替换 sb
StringReplace[s,{sb1->sbnew1,sb2->sbnew2,...}]用对应的 替换
StringReplace[s,rules,n]进行至多 n 次替换
StringReplaceList[s,rules]给出使用每个单一替换所得到的字符串列表
StringReplaceList[s,rules,n]给出至多 n 结果

根据规则替换子串.

用字符串 替换所有的 .
In[20]:=
Click for copyable input
Out[20]=
替换 ,用 替换 .
In[21]:=
Click for copyable input
Out[21]=
第一个 没有被替换,因为它与 重复.
In[22]:=
Click for copyable input
Out[22]=

StringReplace 可以对一个字符串从左到右扫描进行可能的替换,并返回得到的新字符串. 然而,有时候,查看所有可能的单一替换的结果是有用的. 用户可以使用 StringReplaceList 获得所有结果的列表.

这里给出替换每个 得到的结果列表.
In[23]:=
Click for copyable input
Out[23]=
这里显示了所有可能的单一替换的结果.
In[24]:=
Click for copyable input
Out[24]=
StringSplit[s]s 根据空格符分界分成子串组
StringSplit[s,del]在分界符 del 的位置上分组
StringSplit[s,{del1,del2,...}]在任意 的位置上分组
StringSplit[s,del,n]分成至多 n 个子串组

字符串分组.

在每个空格处对字符串进行分组.
In[25]:=
Click for copyable input
Out[25]=
在每个 位置上分组.
In[26]:=
Click for copyable input
Out[26]=
在每个冒号或空格位置上分组.
In[27]:=
Click for copyable input
Out[27]=
StringSplit[s,del->rhs]在每个分解符位置上插入 rhs
StringSplit[s,{del1->rhs1,del2->rhs2,...}]在对应的 位置上插入

替换分界符来对字符串进行分组.

在每个 分界符位置上插入 .
In[28]:=
Click for copyable input
Out[28]=
Sort[{s1,s2,s3,...}]对字符串列表排序

对字符串排序.

Sort 根据标准字典顺序对字符串进行排序.
In[29]:=
Click for copyable input
Out[29]=
StringTrim[s]s 的开头和结尾删除空格
StringTrim[s,patt]从开头和结尾删除与 patt 匹配的子串
从每个字符串的末尾删除空格.
In[30]:=
Click for copyable input
Out[30]//FullForm=
SequenceAlignment[s1,s2]寻找 s1s2 的最优对齐法
寻找两个字符串的最优对齐法.
In[31]:=
Click for copyable input
Out[31]=
New to Mathematica? Find your learning path »
Have a question? Ask support »