PowerShell正则表达式(十二)在文本行的开始插入字符


“替换串”可以由多行文本中的多个实例组成。例如,在你平时回复一封邮件时,你可能在新邮件中会通过在行首添加 “>” 符号来引用原邮件的中的内容。正则表达式就可以做这样的标记。
然而,要完成它,你可能得稍微了解一点“多行”模式。通常,该模式是关闭的,此时限定符”^”代表文本的开始,”$”代表文本的结束。要让这两个限定符可以代表文本行的开始和文本行的结束,必须使用”(?m)”来开启“多行”模式。只有这样,–replace 才会在每个单独的文本行之间替换模式。在“多行”模式开启后,限定符”^” 和 “\A”,还有”$” and “\Z”会顿时拥有不同的表现。”\A”仍然会标志文本的开始,而”^”则会标志文本行的开始。”\Z”仍然会标志文本的结尾,而”$”则会标志文本行结尾。

$text = @"
这是一段文本,
我想在回复的邮件中引用它,
所以我在每行的开始追加了">" 符号。
"@

这是一段文本,
我想在回复的邮件中引用它,
所以我在每行的开始追加了">" 符号。

# 通常, -replace 没有工作在多行模式.
# 鉴于此,只有第一行的开始被替换了:
$text -replace "^", "> "

> 这是一段文本,
我想在回复的邮件中引用它,
所以我在每行的开始追加了">" 符号。

# 如果你开启了多行模式, 替换串则会多行文本中起作用:
$text -replace "(?m)^", "> "

> 这是一段文本,
> 我想在回复的邮件中引用它,
> 所以我在每行的开始追加了">" 符号。

# 你也可以使用RegEx对象来完成多行替换,
# 不过得显式指定多行模式
[regex]::Replace($text, "^", "> ", `
[Text.RegularExpressions.RegExOptions]::Multiline)

> 这是一段文本,
> 我想在回复的邮件中引用它,
> 所以我在每行的开始追加了">" 符号。

# 在多行模式中 \A 仍旧代表文本的开始,^代表行的开始
# 这就是为什么下面的方法只能替换第一行的开始
[regex]::Replace($text, "\A", "> ", `
[Text.RegularExpressions.RegExOptions]::Multiline)

> 这是一段文本,
我想在回复的邮件中引用它,
所以我在每行的开始追加了">" 符号。
本文链接: https://www.pstips.net/search-beginning-of-line.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注