首页 > 解决方案 > 如何修剪字符串直到第一个大写字母

问题描述

这是我的问题。如果我输入$env:UserName,输出是 JoeDow 我需要的是从末尾修剪这个字符串,直到第一个大写字符。输出应该是 JoeD 我尝试了一切,但没有运气 在此先感谢 M

标签: powershell

解决方案


RegEx 很棒,但在这种情况下很简单:

$String = 'JoeDow'
$String -creplace '[a-z]+$'

这只是说区分大小写替换字符串末尾的 az 中的任何小写字符。

在你的情况下:

$env:USERNAME -creplace '[a-z]+$'

注意:我可以想到很多方法来做到这一点。上面的特定方法假设有 2 个大写字母,我们只想在最后一个大写字母之后切掉小写字母。如果你给它一个像'Joe'这样的字符串,它将返回“J”,因为它会替换尾随的小写字母。因此,如果这不是一个超级一致的场景,我们可能不得不走另一条路。

更新,建立在Sage 的好例子之上

如果你使用.LastIndexOfAny(), 再次保证格式稳定,你可以用很少的几行来确定它:

$String = "JoeDow"
$CapitalLetters = [Char[]](65..90)
$String.Substring(0, ($String.LastIndexOfAny($CapitalLetters) +1 ))

这依赖于最后一个资本而不是第二个资本。同样,这取决于您期望的模式有多可靠。

另一种正则表达式方法:

$String = "JoeDow"
$String = -join ($String -csplit "([A-Z])")[1..3]
$String

这个使用大写字母作为分隔符,但是括号指示-csplit运算符返回数组中的分隔符。因此,通过选择正确的范围,我们可以确保抓住“J”+“oe”+“D”。与其他示例不同,它使用第二个大写字母,不一定是最后一个。而另一个选择了最后一个,不一定是第二个。


推荐阅读