5.3.5 字符串中的搜索和替换

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

将字符串 str 中所有出现的模式 ptn 替换为字符串 rep,并返回结果。

可选参数 "overlaps" 决定模式是否可以在 str 的每个位置匹配(true),还是仅匹配完整模式的唯一出现(false)。默认值为 true。

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

示例:

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

另请参阅: regexprepstrfind.

 
newstr = erase (str, ptn)

删除 str 中所有出现的 ptn

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

示例

## 字符串,单个模式
erase ("Hello World!", " World")
    ⇒  "Hello!"

## 元胞字符串,单个模式
erase ({"Hello", "World!"}, "World")
    ⇒  {"Hello", "!"}

## 字符串,多个模式
erase ("The Octave interpreter is fabulous", ...
       {"interpreter ", "The "})
    ⇒  "Octave is fabulous"

## 元胞字符串,多个模式
erase ({"The ", "Octave interpreter ", "is fabulous"}, ...
       {"interpreter ", "The "})
    ⇒  {"", "Octave ", "is fabulous"}

编程说明:当存在重叠出现时,erase 删除字符串中模式的第一个实例。例如:

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

有关处理重叠的详细信息,请参阅 strrep

另请参阅: strrepregexprep.

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

正则表达式字符串匹配。

在 UTF-8 编码的 str 中搜索 pat,返回所有匹配项的位置和子字符串,若无匹配则返回空值。

匹配模式 pat 可以包含任何标准的正则表达式运算符,包括:

.

匹配任意字符

* + ? {}

重复运算符,表示

*

匹配零次或多次

+

匹配一次或多次

?

匹配零次或一次

{n}

精确匹配 n

{n,}

匹配 n 次或更多

{m,n}

匹配介于 mn 次之间

[…] [^…]

列表运算符。模式将匹配 "[""]" 之间列出的任意字符。如果第一个字符是 "^",则模式取反,匹配任何不在括号内列出的字符。

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

() (?:)

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

|

交替运算符。匹配多个可选正则表达式中的一个。备选方案必须由上面的 () 分组运算符界定。

^ $

锚定运算符。要求模式出现在字符串的开头(^)或结尾($)。

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

\d

匹配任意数字

\D

匹配任意非数字字符

\s

匹配任意空白字符

\S

匹配任意非空白字符

\w

匹配任意单词字符

\W

匹配任意非单词字符

\<

匹配单词的开头

\>

匹配单词的结尾

\B

匹配单词边界(在 \b 不匹配的位置匹配)

有关支持的选项的完整说明,请使用 help regexp

另请参阅: regexpiregexprepregexptranslate.

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

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

在 UTF-8 编码的 str 中搜索 pat,返回所有匹配项的位置和子字符串,若无匹配则返回空值。有关搜索模式语法的详细信息,请参阅 regexp

另请参阅: regexp.

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

string 中出现的模式 pat 替换为 repstr

该模式是 regexp 中记录的正则表达式。请参阅 regexp

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

替换字符串可以包含 $i,它会替换为匹配字符串中第 i 对括号的内容。例如,

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

返回 "Dunn, Bill"

regexp 的选项外,还有以下选项:

once

只替换结果中第一次出现的 pat

warnings

该选项仅为兼容性而存在,但会被忽略。

实现说明:为了与 MATLAB 兼容,pat 中的转义序列(例如 "\n" => 换行符)即使 pat 是用单引号定义的,也会被展开。要禁用展开,请在转义序列前使用第二个反斜杠(例如 "\\n"),或使用 regexptranslate 函数。

另请参阅: regexpregexpistrrep.

 
str = regexptranslate (op, s)

将字符串转换为可用于正则表达式的形式。

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

行为由 op 控制,它可以取以下值:

"wildcard"

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

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

对正则表达式有特殊意义的字符 $.?[] 会被转义,以便按字面意思处理。例如:

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

另请参阅: regexpregexpiregexprep.


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

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