powershell - 如何修剪字符串直到第一个大写字母
问题描述
这是我的问题。如果我输入$env:UserName
,输出是 JoeDow 我需要的是从末尾修剪这个字符串,直到第一个大写字符。输出应该是 JoeD 我尝试了一切,但没有运气 在此先感谢 M
解决方案
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”。与其他示例不同,它使用第二个大写字母,不一定是最后一个。而另一个选择了最后一个,不一定是第二个。
推荐阅读
- matlab - 如何从 MATLAB 中的字符向量中提取某些单词?
- maven - 订购不符合需求时如何处理maven生命周期
- php - 如何使用 PHP SQL 准备语句避免代码重复?
- timestamp - 在某个时间戳停止 rosbag 以与修改后的包进行比较
- python - 我最近更改了编译器路径以运行 c++ 代码,但现在我无法运行任何 python 代码。我该如何解决?
- javascript - 为什么这是有效的 javascript?那些括号在做什么?(不是匿名函数)
- python - KeyError: 0 ,同时运行 while 循环
- python - 我使用 python 创建了一个排行榜,但我的代码打印在一行中。我希望它像排行榜格式一样单独打印每个元素
- r - 如何将性别列的值更改为 R 中的数值?
- php - Magento 2 -- debug.log -- main.DEBUG:操作“供应商\模块\控制器\索引\发布\拦截器”的请求验证失败