5.3.5字符串中的搜索和替换

 
: newstr = strrep (str, ptn, rep)
: newstr = strrep (cellstr, ptn, rep)
: newstr = strrep (…, "overlaps", val)

替换所有出现的图案ptn在字符串中str用绳子rep并返回结果。

可选参数"overlaps"确定图案是否可以在中的每个位置匹配str(true),或仅用于完全模式的唯一出现(false)。默认值为true。

s也可以是字符串的元胞数组,在这种情况下,对每个元素进行替换,并返回元胞数组。

用例

strrep ("This is a test string", "is", "&%$")
    ⇒  "Th&%$ &%$ a test string"

详见: regexprep, strfind.

广告
 
: newstr = erase (str, ptn)

删除所有出现的ptn在内部str.

strptn可以是普通字符串、字符串的元胞数组或字符数组。

示例

## string, single pattern
erase ("Hello World!", " World")
    ⇒ "Hello!"

## cellstr, single pattern
erase ({"Hello", "World!"}, "World")
    ⇒ {"Hello", "!"}

## string, multiple patterns
erase ("The Octave interpreter is fabulous", ...
       {"interpreter ", "The "})
    ⇒ "Octave is fabulous"

## cellstr, multiple patterns
erase ({"The ", "Octave interpreter ", "is fabulous"}, ...
       {"interpreter ", "The "})
    ⇒ {"", "Octave ", "is fabulous"}

编程说明:erase当出现重叠时,删除跨接中图案的第一个实例。例如

erase ("abababa", "aba")
    ⇒ "b"

有关处理重叠的信息,详见strrep.

详见: strrep, regexprep.

广告
 
: [s, e, te, m, t, nm, sp] = regexp (str, pat)
: […] = regexp (str, pat, "opt1", …)

正则表达式字符串匹配。

搜索pat以UTF-8编码str并返回任何匹配项的位置和子字符串,如果没有,则返回空值。

匹配的图案pat可以包括任何标准regexoperator,包括:

.

匹配任何字符

广告
* + ? {}

重复运算符,表示

*

匹配零次或多次

+

匹配一次或多次

?

匹配零次或一次

{n}

完全匹配n

{n,}

火柴n或更多次

{m,n}

之间匹配mn

广告
[…] [^…]

列出运算符。该模式将与之间列出的任何字符匹配"[""]"。如果第一个字符是"^"则模式反转,除括号之间列出的字符外的任何字符都将匹配。

下面定义的转义序列也可以在列表运算符中使用。例如,浮点数字的模板可能是[-+.\d]+.

广告
() (?:)

分组运算符。第一种形式(仅括号)也会创建一个符号。

广告
|

交替运算符。匹配所选正则表达式中的一个。备选方案必须从分组运算符分隔()在上面

广告
^ $

锚固运算符。要求在开始时出现模式(^)orend($)字符串的。

广告

此外,以下转义字符具有特殊含义。

\d

匹配任意数字

广告
\D

匹配任何非数字

广告
\s

匹配任何空白字符

广告
\S

匹配任何非空白字符

广告
\w

匹配任意单词字符

广告
\W

匹配任何非单词字符

广告
\<

匹配单词的开头

广告
\>

匹配单词的末尾

广告
\B

单词内匹配

广告

支持说明:为了与兼容MATLAB,转义序列inpat(例如。,"\n"=>换行符)被扩展,即使当pat已用单引号定义。要禁用扩展,请在转义序列之前使用第二个反斜杠(例如,“\\n”),或者使用regexptranslate作用

的输出regexp默认以下顺序

s

每个匹配子字符串的起始索引

广告
e

每个匹配子字符串的结束索引

广告
te

从包围的每个匹配令牌的范围(…)在里面pat

广告
m

每个匹配的文本的元胞数组

广告
t

匹配的每个符号的文本的元胞数组

广告
nm

一个结构体,包含每个匹配的命名符号的文本,名称用作字段名。命名令牌表示为(?<name>…).

广告
sp

匹配未返回的文本的元胞数组,即,如果您根据pat.

广告

特定的输出参数或输出参数的顺序可以从附加的opt参数。这些是字符串以及输出参数和可选参数之间的对应关系

'start' s
'end' e
'tokenExtents' te
'match' m
'tokens' t
'names' nm
'split' sp

其他参数总结如下。

一旦

只返回第一次出现的模式。

广告
火柴盒

使匹配的大小写敏感。默认

或者,在模式中使用(?-i)。

广告
忽略大小写

将模式与字符串匹配时忽略大小写。

或者,在模式中使用(?i)。

广告
斯特林根霍斯

匹配字符串开头和结尾的定位字符。(默认值)

或者,在模式中使用(?-m)。

广告
线锚

匹配行首和行尾的定位字符。

或者,在图案中使用(?m)。

广告
dotall

图案.匹配包括换行符在内的所有字符。默认

或者,在模式中使用(?s)。

广告
点例外换行

图案.匹配除换行符以外的所有字符。

或者,在模式中使用(?-s)。

广告
文字空间

模式中的所有字符,包括空格,都是重要的,并用于模式匹配。默认

或者,在模式中使用(?-x)。

广告
自从空间

该模式可能包括任意空白,也可能包括以字符“”开头的注释#’.

或者,在模式中使用(?x)。

广告
无比赛

不返回长度为零的匹配项。默认

广告
空火柴

返回零长度的匹配项。

regexp ('a', 'b*', 'emptymatch')退货[1 2]因为有零个或更多'b'位置1和字符串末尾的字符。

广告

堆栈限制注意:模式搜索是用递归函数完成的,当有大量匹配时,递归函数可能会溢出程序堆栈。例如

regexp (repmat ('a', 1, 1e5), '(a)+')

可能导致segfault。作为一种替代方案,考虑构建减少匹配数量的模式搜索(例如,通过创造性地使用setcomplement),然后用连续的regexp搜索。

Octave的regexp实现基于Perl兼容正则表达式库(https://www.pcre.org/). 更全面的列表regexp运算符语法详见PCRE语法快速参考摘要.

详见: regexpi, strfind, regexprep.

广告
 
: [s, e, te, m, t, nm, sp] = regexpi (str, pat)
: […] = regexpi (str, pat, "opt1", …)

不区分大小写的正则表达式字符串匹配。

搜索pat以UTF-8编码str并返回任何匹配项的位置和子字符串,如果没有,则返回空值。详见regexp,以获取有关搜索模式语法的详细信息。

详见: regexp.

广告
 
: outstr = regexprep (string, pat, repstr)
: outstr = regexprep (string, pat, repstr, "opt1", …)

替换出现的图案pat在里面string具有repstr.

该模式是一个正则表达式,如所述regexp详见regexp.

所有字符串都必须是UTF-8编码的。

替换字符串可能包含$i,它替换匹配字符串中的第i组圆括号。例如,

regexprep ("Bill Dunn", '(\w+) (\w+)', '$2, $1')

退货"Dunn, Bill"

的参数之外的参数regexp

一旦

仅替换第一次出现的pat结果。

广告
警告

此参数是为了兼容而存在的,但会被忽略。

广告

支持说明:为了与兼容MATLAB,转义序列inpat(例如。,"\n"=>换行符)被扩展,即使当pat已用单引号定义。要禁用扩展,请在转义序列之前使用第二个反斜杠(例如,“\\n”),或者使用regexptranslate作用

详见: regexp, regexpi, strrep.

广告
 
: str = regexptranslate (op, s)

翻译用于正则表达式的字符串。

这可能包括通配符替换或特殊字符转义。

行为从控制op可以取以下值

"wildcard"

通配符., *?替换为适用于正则表达式的通配符。例如

regexptranslate ("wildcard", "*.m")
     ⇒ '.*\.m'
广告
"escape"

角色$.?[],对正则表达式具有特殊意义,这些正则表达式被转义,以便按字面意思处理。例如

regexptranslate ("escape", "12.5")
     ⇒ '12\.5'
广告

详见: regexp, regexpi, regexprep.

广告

版权所有 © 2024-2025 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-2