查找并匹配大写字母加冒号(“:”)的单词

查找并匹配大写字母加冒号(“:”)的单词

如何查找和匹配仅以大写字母、冒号(后跟)开头的文本(字母):并将其替换为单个名称(“MyName”)?

我也想制作彩色文本,但我不知道如何为所有大写字母后跟冒号(:)添加仅此配色方案,而不修改人名。

例子:

MIKE: - Go to school!

VICTORIA: Yes, I go right now.

< font color="#800080">MIKE:</font> - Go to school!

< font color="#800080">VICTORIA:</font> Yes, I go right now.

答案1

PowerShell 解决方案:

Get-Content "file.txt" |
ForEach-Object { $_ -CReplace "[A-Z]+:", "MyName" } |
Set-Content "file.txt"

快速解释:

  • Get-Content检索指定文件的内容。管道字符 ( |) 将结果传递给下一个命令。
  • ForEach-Object逐行循环遍历文件的内容,并对每一行(用 表示$_)用第二个参数给出的文本替换第一个参数给出的文本。[A-Z]+:正则表达式,搜索一个或多个(+)大写字母([A-Z])后跟冒号。-CReplace用于区分大小写的搜索,因为 PowerShell 中的正则表达式默认不区分大小写。
  • Set-Content与之相反Get-Content,将输入写回到给定的文件。

为了便于阅读,我将代码分成几行,但你可以将其全部写在一行中。使用别名你甚至可以大大缩短它:

gc "file.txt" | % { $_ -creplace "[A-Z]+:", "MyName" } | sc "file.txt"

如果您想要实际修改每个匹配,而不是用固定文本替换它,请尝试以下操作:

Get-Content "file.txt" |
ForEach-Object { $_ -CReplace "([A-Z]+:)", '<font color="#800080">$1</font>' } |
Set-Content "file.txt"

请注意与以前版本相比的两个变化:

  • 正则表达式[A-Z]+:被括号括起来。这将创建一个反向引用,我们稍后在替换文本中将其称为$1。这就是您在结果中保留要搜索的文本而不是替换它的方法。
  • 替换文本周围使用单引号。如果您使用双引号,PowerShell 会尝试将其解释$1为不存在的变量,并且不会在您期望名称所在的位置返回任何内容。此外,当文本包含双引号时(如 HTML 的情况),单引号很方便,因为您不必用反引号转义每个双引号。

答案2

您可以使用修改后的 Indreks 答案

  -replace "([A-Z]:)", "<font color='#800080'>$1</font>"

或更好

  -replace "([A-Z]:)", "<span class='name'>$1</span>"

然后添加到你的 CSS

  span.name { color:#800080; }

未经测试,您可能需要使用\“转义”powershell 中的保留字符。

Powershell 是一个不错的选择,因为您的 Windows 计算机上几乎肯定已经有它了。

我没有动力去学习 Powershell,因为安装 Perl(和/或 GNU 文件实用程序,包括 sed awk grep 等)非常容易

使用 perl 的解决方案如下

 perl -p -i -e 's/[A-Z]+:/<span class="name">$&</span>' f1.txt zz.txt b/c/*.txt

(我发现这比 powershell 简单,但我有偏见)

相关内容