regexprep
使用正则表达式替换文本
语法
说明
将 newStr
= regexprep(str
,expression
,replace
)str
中与 expression
匹配的文本替换为 replace
描述的文本。regexprep
函数在 newStr
中返回更新的文本。
如果
str
是一段文本(字符向量或字符串标量),则newStr
也是一段相同类型的文本。即使expression
或replace
是字符向量元胞数组或字符串数组,newStr
也是一段文本。当expression
为元胞数组或字符串数组时,regexprep
将第一个表达式应用于str
,然后将每个后续表达式应用于前面的结果。如果
str
是元胞数组或字符串数组,则newStr
是与str
具有相同维度的元胞数组或字符串数组。对于str
的每个元素,regexprep
函数按顺序应用各表达式。如果不存在与
expression
的匹配项,则newStr
等同于str
。
示例
更新的文本
替换以 M
开头和以 y
结尾且其中至少有一个字符的单词。
str = 'My flowers may bloom in May'; expression = 'M(\w+)y'; replace = 'April'; newStr = regexprep(str,expression,replace)
newStr = 'My flowers may bloom in April'
在替代文本中包括词元
通过在词元中捕获紧随 'walk'
的字母来替换短语 'walk up'
的变体。
str = 'I walk up, they walked up, we are walking up.'; expression = 'walk(\w*) up'; replace = 'ascend$1'; newStr = regexprep(str,expression,replace)
newStr = 'I ascend, they ascended, we are ascending.'
在替代文本中包括动态表达式
使用 upper
函数将句子开头的小写字母替换为其大写形式。
str = 'here are two sentences. neither is capitalized.'; expression = '(^|\.)\s*.'; replace = '${upper($0)}'; newStr = regexprep(str,expression,replace)
newStr = 'Here are two sentences. Neither is capitalized.'
该正则表达式匹配紧随字符向量 (^)
开头的单个字符 (.
) 或句点 (\.)
和任何空白 (\s*)
。replace
表达式调用 upper
函数以获取当前匹配的字符 ($0
)。
更新多段文本
将一组字符向量中的每个双重复字母替换为符号 '--'
。
str = { ... 'Whose woods these are I think I know.' ; ... 'His house is in the village though;' ; ... 'He will not see me stopping here' ; ... 'To watch his woods fill up with snow.'}; expression = '(.)\1'; replace = '--'; newStr = regexprep(str,expression,replace)
newStr = 4x1 cell
{'Whose w--ds these are I think I know.'}
{'His house is in the vi--age though;' }
{'He wi-- not s-- me sto--ing here' }
{'To watch his w--ds fi-- up with snow.'}
保留原始文本中的大小写
在查找匹配项时忽略正则表达式中的字母大小写,但在更新时模拟原始文本的字母大小写。
str = 'My flowers may bloom in May'; expression = 'M(\w+)y'; replace = 'April'; newStr = regexprep(str,expression,replace,'preservecase')
newStr = 'My flowers april bloom in April'
替换零长度匹配项
使用 '^'
运算符在字符向量开头插入文本,这将返回零长度匹配项,以及 'emptymatch'
关键字。
str = 'abc'; expression = '^'; replace = '__'; newStr = regexprep(str,expression,replace,'emptymatch')
newStr = '__abc'
输入参数
str
— 要更新的文本
字符向量 | 字符向量元胞数组 | 字符串数组
要更新的文本,指定为字符向量、字符向量元胞数组或字符串数组。
数据类型: char
| cell
| string
expression
— 正则表达式
字符向量 | 字符向量元胞数组 | 字符串数组
正则表达式,指定为字符向量、字符向量元胞数组或字符串数组。每个表达式可包含字符、元字符、运算符、词元和用于指定在 str
中匹配的模式的标志。
下表描述了正则表达式的各元素。
元字符
元字符表示字母、字母范围、数字和空格字符。使用它们来构造广义的字符模式。
元字符 | 描述 | 示例 |
---|---|---|
| 任何单个字符,包括空白 |
|
| 包含在方括号中的任意字符。下列字符将按字面意义进行处理: |
|
| 未包含在方括号中的任意字符。下列字符将按字面意义进行处理: |
|
|
|
|
| 任意字母、数字或下划线字符。对于英语字符集, |
|
| 字母、数字或下划线之外的任意字符。对于英语字符集, |
|
| 任意空白字符;等同于 |
|
| 任意非空白字符;等同于 |
|
| 任意数字;等同于 |
|
| 任意非数字字符;等同于 |
|
| 八进制值 |
|
| 十六进制值 |
|
字符表示
运算符 | 描述 |
---|---|
| 警报(蜂鸣) |
| 退格符 |
| 换页符 |
| 换行符 |
| 回车符 |
| 水平制表符 |
| 垂直制表符 |
| 正则表达式中您要从字面上匹配(例如,使用 |
限定符
限定符指定某个模式必须出现在匹配文本中的次数。
限定符 | 表达式出现的次数 | 示例 |
---|---|---|
| 0 次或连续多次。 |
|
| 0 次或 1 次。 |
|
| 1 次或连续多次。 |
|
| 至少
|
|
| 至少连续
|
|
| 恰好连续 等效于 |
|
限定符可以以三种模式显示,如下表所述。q 表示上表中的任意限定符。
模式 | 描述 | 示例 |
---|---|---|
| 积极表达式:与尽可能多的字符匹配。 | 给定文本
|
| 消极表达式:与所需的尽可能少的字符匹配。 | 给定文本
|
| 主动表达式:最大程度地匹配,但不重新扫描文本的任何部分。 | 给定文本 |
分组运算符
分组运算符允许您捕获词元,将一个运算符应用于多个元素或在特定组中禁止追溯。
分组运算符 | 描述 | 示例 |
---|---|---|
| 将表达式元素分组并捕获词元。 |
|
| 分组但不捕获词元。 |
不进行分组时, |
| 以原子方式分组。不在组中追溯以完成匹配,并且不捕获词元。 |
|
| 匹配表达式 如果存在与 您可以在左括号后包括 |
|
定位点
表达式中的定位点与文本或单词的开头或结尾匹配。
定位点 | 与以下项匹配 | 示例 |
---|---|---|
| 输入文本的开头。 |
|
| 输入文本的结尾。 |
|
| 单词开头。 |
|
| 单词结尾。 |
|
环顾断言
环顾断言查找紧邻预期匹配项前后但并非该匹配项一部分的模式。
指针停留在当前位置,并且将放弃或不捕获对应于 test
表达式的字符。因此,前向断言可匹配重叠字符组。
环顾断言 | 描述 | 示例 |
---|---|---|
| 向前查找与 |
|
| 向前查找与 |
|
| 向后查找与 |
|
| 向后查找与 |
|
如果您在表达式之前指定前向断言,则运算等同于逻辑 AND
。
运算 | 描述 | 示例 |
---|---|---|
| 同时与 |
|
| 匹配 |
|
逻辑和条件运算符
逻辑和条件运算符允许您测试给定条件的状态,然后使用结果确定哪个模式(如果有)与下一条件匹配。这些运算符支持逻辑 OR
、if
或 if/else
条件。
条件可以是词元、环顾运算符或 (?@cmd)
形式的动态表达式。动态表达式必须返回逻辑值或数值。
条件运算符 | 描述 | 示例 |
---|---|---|
| 匹配表达式 如果存在与 |
|
| 如果条件 |
|
| 如果条件 |
|
词元运算符
词元是您通过将正则表达式的部分括在括号中而定义的匹配文本的部分。您可以按词元在文本中的顺序引用该词元(顺序词元),或将名称分配给词元以便于代码维护和使输出更易于阅读。
顺序词元运算符 | 描述 | 示例 |
---|---|---|
| 在词元中捕获与括起来的表达式匹配的字符。 |
|
| 匹配第 |
|
| 如果找到第 |
|
命名词元运算符 | 描述 | 示例 |
---|---|---|
| 在命名词元中捕获与括起来的表达式匹配的字符。 |
|
| 匹配 |
|
| 如果找到命名词元,则匹配 |
|
注意
如果表达式具有嵌套括号,则 MATLAB® 捕获对应于最外层括号的词元。例如,给定搜索模式 '(and(y|rew))'
,MATLAB 将为 'andrew'
但不为 'y'
或 'rew'
创建一个词元。
动态正则表达式
动态表达式允许您执行 MATLAB 命令或正则表达式以确定要匹配的文本。
将动态表达式括起来的括号不创建捕获组。
运算符 | 描述 | 示例 |
---|---|---|
| 解析 解析后, |
|
| 执行 |
|
| 执行 |
|
在动态表达式中,使用下列运算符定义替代文本。
替代运算符 | 描述 |
---|---|
| 当前作为匹配项的输入文本部分 |
| 位于当前匹配项之前的输入文本部分 |
| 紧随当前匹配项的输入文本部分(使用 |
| 第 |
| 命名词元 |
| 在 MATLAB 执行命令 |
注释
字符 | 描述 | 示例 |
---|---|---|
(?#comment) | 在正则表达式中插入注释。匹配输入时将忽略注释文本。 |
|
搜索标志
搜索标志修改匹配表达式的行为。在表达式中使用搜索标志的替代方法是传递 option
输入参数。
标志 | 描述 |
---|---|
(?-i) | 匹配字母大小写( |
(?i) | 不匹配字母大小写( |
(?s) | 将模式中的点 ( |
(?-s) | 将模式中的点与并非换行符的任意字符匹配。 |
(?-m) | 匹配文本开头和结尾的 |
(?m) | 匹配行开头和结尾的 |
(?-x) | 在匹配时包括空格字符和注释(默认值)。 |
(?x) | 在匹配时忽略空格字符和注释。使用 |
该标志修改的表达式可显示在括号后,例如
(?i)\w*
或显示在括号内并使用冒号 (:
) 与该标志分隔开,例如
(?i:\w*)
后面的语法允许您更改较大表达式的一部分的行为。
数据类型: char
| cell
| string
replace
— 替代文本
字符向量 | 字符向量元胞数组 | 字符串数组
替代文本,指定为字符向量、字符向量元胞数组或字符串数组,如下所示:
如果
replace
为单个字符向量且expression
为字符向量元胞数组,则regexprep
对每个表达式使用相同的替代文本。如果
replace
为N
字符向量的元胞数组且expression
为单个字符向量,则regexprep
尝试N
次匹配和替代。如果
replace
和expression
均为字符向量元胞数组,则它们必须包含相同数量的元素。regexprep
将每个replace
元素与expression
中与其匹配的元素配对。
替代文本可以包括常规字符、特殊字符(例如制表符或换行符)或替代运算符,如下表所示。
替代运算符 | 描述 |
---|---|
| 当前作为匹配项的输入文本部分 |
| 位于当前匹配项之前的输入文本部分 |
| 紧随当前匹配项的输入文本部分(使用 |
| 第 |
| 命名词元 |
| 在 MATLAB 执行命令 |
运算符 | 描述 |
---|---|
| 警报(蜂鸣) |
| 退格符 |
| 换页符 |
| 换行符 |
| 回车符 |
| 水平制表符 |
| 垂直制表符 |
| 正则表达式中您要从字面上匹配(例如,使用 |
数据类型: char
| cell
| string
option
— 搜索或替代选项
'once'
| N
| 'warnings'
| 'ignorecase'
| 'preservecase'
| 'emptymatch'
| 'dotexceptnewline'
| 'lineanchors'
| ...
搜索或替代选项,指定为一个字符向量或整数值,如下表所示。
选项成组出现:一个选项对应于默认行为,一个或两个选项允许您覆盖默认值。仅指定一组中的一个选项。选项可以按任意顺序显示。
默认值 | 覆盖 | 描述 |
---|---|---|
|
| 尽可能多次地匹配和替换表达式(默认值),或仅匹配和替换一次。 |
| 仅替换第 | |
|
| 取消警告(默认值),或显示警告。 |
|
| 匹配字母大小写(默认值),或在匹配和替换时忽略大小写。 |
| 在匹配时忽略大小写,但如果与以下结构之一匹配,则在替换时保留对应字符在原始文本中的大小写:
如果原始文本与以上结构之一不匹配,则替代文本将全部小写。 | |
|
| 忽略零长度匹配项(默认值),或包括这些匹配项。 |
|
| 将点与任意字符匹配(默认值),或与除换行符 ( |
|
| 将 |
|
| 在匹配时包括空格字符和注释(默认值),或忽略它们。借助 |
数据类型: char
| string
输出参数
扩展功能
tall 数组
对行数太多而无法放入内存的数组进行计算。
此函数完全支持 tall 数组。有关详细信息,请参阅 tall 数组。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
版本历史记录
在 R2006a 之前推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)