在这个上挠头……
我想删除.com,并从“ sometext.com”中大写S和T。
所以输出将是一些文本
提前谢谢
答案 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