首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PowersShell UpperCase替换

PowersShell UpperCase替换
EN

Stack Overflow用户
提问于 2021-04-20 17:04:58
回答 2查看 70关注 0票数 0

好的..。经过99个不同的组合..。

我想把数千个文件中的所有EnumMessage.something替换成EnumMessage.SOMETHING,所以大写的第二个词。它可以是独立的,也可以后面是点,或者后面是(

代码语言:javascript
复制
$output = 'EnumMessage.test(something) and EnumMessage.Tezt andz EnumMessage.ALREAdY. ' -creplace 'EnumMessage\.(\w+)', 'EnumMessage.$1.ToUpper()'
$output

因此,上面把函数放在上面(单词),但它没有放在第二个单词的上方。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-20 19:13:57

在PowerShell 6和更高版本中,-replace操作符也接受执行替换操作的脚本块。。脚本块为每次匹配运行一次。

在PowerShell 5中,应用方法

代码语言:javascript
复制
$string  = 'EnumMessage.test(something) and EnumMessage.Tezt andz EnumMessage.ALREAdY. '
$pattern = '(?<=EnumMessage\.)(\w+)'
#           (?<=EnumMessage\.)               = positive lookbehind
if ( $PSVersionTable.PSVersion.Major -ge 6 ) {
    $string -replace $pattern, { $_.Value.ToUpper() }
} else {
    [regex]::Replace( $string, $pattern, { $args.Value.ToUpper() } )
}
票数 2
EN

Stack Overflow用户

发布于 2021-04-20 19:09:54

肯定有一些挑战。我在RegEx真的不是最好的。每当我试图利用$matches集合时,我都只能替换第一个匹配项。关于这个功能我可能忘了一些东西。然而,我却能做出以下几点:

代码语言:javascript
复制
[RegEx]::Matches($String, '(?<=EnumMessage\.)\w+') |
ForEach-Object{
    $Replace = $String.Substring($_.Index, $_.Length).ToUpper()
    $String  = $String.Remove($_.Index, $_.Length)
    $String  = $String.Insert($_.Index, $Replace)
}
$String

注意:我使用了RegEx查找,但我不确定,这与结果有很大关系。

.Net [RegEx]类返回对象,其中包含字符串中匹配的位置,因此我使用该对象来战略性地删除,然后添加被大写的字符串。哪个应该返回:EnumMessage.TEST(something) and EnumMessage.TEZT andz EnumMessage.ALREADY.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67183335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档