字符串模式

字符串操作函数如 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]rhs 替换每个 lhs
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 语言模式对象. 总是表示单个字符. 表示一个或多个字符组成的序列.

表示任意单个字符.
In[8]:=
Click for copyable input
Out[8]=
表示一个或多个字符组成的任意序列.
In[9]:=
Click for copyable input
Out[9]=
表示0个或多个字符组成的任意序列.
In[10]:=
Click for copyable input
Out[10]=
"string"由字符组成的字符串
_任意单个字符
__由一个或多个字符组成的任意序列
___由0个或多个字符组成的任意序列
x_, x__, x___名称有 x 的子串
x:pattern名称为 x 的模式
pattern..重复1次或多次的模式
pattern...重复0次或多次的模式
{patt1,patt2,} 或者 patt1|patt2|与至少一个 匹配的模式
patt/;condcond 等于 True 的模式
pattern?test对每个字符 test 等于 True 的模式
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]=

可以使用标准 Wolfram 语言结构,如 Characters["c1c2"]CharacterRange["c1","c2"] 来产生在字符串模式中应用的其它字符列表.

这里给出字符列表.
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"] 范围内的任意字符
DigitCharacter数字 09
LetterCharacter字母
WhitespaceCharacter空白、换行、tab或其它空格字符
WordCharacter字母或数字
Except[p]除了与 p 匹配的任意字符

字符类的规定.

这里在一个字符串中选出数字字符.
In[17]:=
Click for copyable input
Out[17]=
这里选出除了数字以外的所有字符.
In[18]:=
Click for copyable input
Out[18]=
这里选出所有一个或多个数字组成的子序列.
In[19]:=
Click for copyable input
Out[19]=
所得结果是字符串.
这里把字符串转换为数字.
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]=

在许多情况下,文本数据可能包含空白、换行或tab这些可以被认作空格可以忽略的序列. 在 Wolfram 语言中,符号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], etc.除了特定位置如 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不包含所有重叠

处理字符串中重叠的选项.

这里只产生单个匹配.
In[39]:=
Click for copyable input
Out[39]=
这里产生连续的重叠匹配.
In[40]:=
Click for copyable input
Out[40]=
这里包含所有可能的重叠匹配.
In[41]:=
Click for copyable input
Out[41]=