Powershell-删除文本并大写一些字母

时间:2019-10-25 19:53:17

标签: powershell

在这个上挠头……

我想删除.com,并从“ sometext.com”中大写S和T。

所以输出将是一些文本

提前谢谢

2 个答案:

答案 0 :(得分:0)

对于大多数情况,您可以使用String对象的replace()成员。 语法为:

$string = $string.replace('what you want replaced', 'what you will replace it with')

替换可用于擦除内容,方法是在第二个参数中使用空白引号''。这样便可以摆脱.com

$string = $string.replace('.com','')

它也可以用来插入东西。您可以在some和text之间插入一个空格,如下所示:

$string = $string.replace('et', 'e t')

请注意,使用replace不会更改原始变量。下面的命令将在屏幕上显示“ that”,但$ string的值仍为“ this”

$string = 'this'
$string.replace('this', 'that')

您必须使用=

将变量设置为新值。
$string = "this"
$string = $string.replace("this", "that")

此命令会将$ string的值更改为该值。

这里最棘手的部分是将第一个t更改为大写T,而不更改最后一个t。使用字符串,replace()替换文本的每个实例。

$string = "text"
$string = $string.replace('t', 'T')

这会将$ string设置为TexT。要解决此问题,您可以使用Regex。正则表达式是一个复杂的主题。这里只知道Regex对象看起来像字符串,但是它们的replace方法的工作方式略有不同。您可以添加数字作为第三个参数,以指定要替换的项目

$string = "aaaaaa"
[Regex]$reggie = 'a'
$string = $reggie.replace($string,'a',3)

此代码将$ string设置为AAAaaa。

这是将sometext.com更改为Some Text的最终代码。

$string = 'sometext.com'
#Use replace() to remove text.
$string = $string.Replace('.com','')
#Use replace() to change text
$string = $string.Replace('s','S')
#Use replace() to insert text.
$string = $string.Replace('et', 'e t')
#Use a Regex object to replace the first instance of a string.
[regex]$pattern = 't'
$string = $pattern.Replace($string, 'T', 1)

答案 1 :(得分:0)

您要实现的目标没有明确定义,但这是一个简洁的 PowerShell Core 解决方案

PsCore> 'sometext.com' -replace '\.com$' -replace '^s|t(?!$)', { $_.Value.ToUpper() }

SomeText
  • -replace '\.com$'从输入字符串中删除文字尾随.com

  • -replace '^s|t(?!$), { ... }匹配一个s字符。在开头(^)和结尾处的t!不是$); (?!...)是所谓的否定look-ahead assertion,它在输入字符串中向前看,而没有包括它在整体比赛中的发现。

  • 每次匹配都会调用脚本块{ $_.Value.ToUpper() },并将其转换为大写。

  • -replace(又称-ireplace)默认不区分大小写;使用-creplace进行区分大小写的替换。

有关PowerShell -replace运算符的更多信息,请参见this answer


传递 script块{ ... })以动态地 确定Windows PowerShell不支持替换字符串,因此 Windows PowerShell 解决方案要求直接使用.NET [regex]

WinPs> [regex]::Replace('sometext.com' -replace '\.com$', '^s|t(?!$)', { param($m) $m.Value.ToUpper() })

SomeText