规则表达式
Mathematica 的一般模式提供了进行字符串操作的强大方法. 但是如果对专门的字符串操作语言熟悉的话,有时可能会发现使用规则表达式 记号指明字符串模式是方便的. 在 Mathematica 中可以使用 RegularExpression 对象实现.
| RegularExpression["regex"] | 由 |
| In[1]:= |
| Out[1]= |
| In[2]:= |
| Out[2]= |
| In[3]:= |
| Out[3]= |
RegularExpression 在 Mathematica 中支持所有标准规则表达式结构.
| c | 字母字符 c |
| . | 除了新的一行以外的任何字符 |
| [c1c2...] | 任何 |
| [c1-c2] | 在 |
| [^c1c2...] | 除了 |
| p* | 重复0次或多次的 p |
| p+ | 重复1次或多次的 p |
| p? | 出现0次或1次的 p |
| p{m,n} | 重复 m 到 n 次之间的 p |
| p*?, p+?, p?? | 最短的符合匹配条件的一致字符串 |
| (p1p2...) | 与序列 |
| p1|p2 | 与 |
| In[4]:= |
| Out[4]= |
| In[5]:= |
| Out[5]= |
在许多规则表达式结构和基本的 Mathematica 一般字符串模式结构之间存在紧密的对应关系.
| . | _ (严格上,Except["\n"]) |
| [c1c2...] | Characters["c1c2..."] |
| [c1-c2] | CharacterRange["c1","c2"] |
| [^c1c2...] | Except[Characters["c1c2..."]] |
| p* | p... |
| p+ | p.. |
| p? | p|"" |
| p*?, p+?, p?? | Shortest[p...],... |
| (p1p2...) | (p1~~p2~~...) |
| p1|p2 | p1|p2 |
正如在 Mathematica 一般字符串模式中一样,在规则表达式中也有对不同的通用字符类的特殊记号. 注意,用户需要使用
符号来在 Mathematica 规则表达式字符串中输入大多数记号.
| \\d | 数字 0-9 (DigitCharacter ) |
| \\D | 非数字 (Except[DigitCharacter]) |
| \\s | 空格、换行、tab 或其他空格字符 (WhitespaceCharacter) |
| \\S | 非空格字符(Except[WhitespaceCharacter]) |
| \\w | 词字符(字母、数字或 |
| \\W | 非词字符(Except[WordCharacter]) |
| [[:class:]] | 位于命名类中的字符 |
| [^[:class:]] | 不位于命名类中的字符 |
| In[6]:= |
| Out[6]= |
| In[7]:= |
| Out[7]= |
Mathematica 支持标准 POSIX 字符类
、
、
、
、
、
、
、
、
、
、
、
、
和
.
| In[8]:= |
| Out[8]= |
| In[9]:= |
| Out[9]= |
| ^ | 字符串的开头 (StartOfString) |
| $ | 字符串的末尾 (EndOfString) |
| \\b | 词边界(WordBoundary) |
| \\B | 除了词边界的任何位置 (Except[WordBoundary]) |
在一般的 Mathematica 模式中,可以使用例如
和
等结构来对匹配的对象给出任意的名字. 在规则表达式中,可以使用如下方法处理序列号:在一个规则表达式中第 n 个带括号的模式对象 (p) 在模式内为 \\n,而在模式外为
.
| In[10]:= |
| Out[10]= |
| In[11]:= |
| Out[11]= |
| In[12]:= |
| Out[12]= |
| In[13]:= |
| Out[13]= |
