Jos*_*tiz 6 powershell replace
大家好我想用PowerShell从用户ID中获取数字
我们使用的格式是名字的第一个字母,姓氏和studentid的前四个字母,所以名为John Smith且ID为#123456的学生将是jsmit123456,如果用户少于4个字母,我将得到的问题他们的名字.所以使用子字符串会给那些id的错误
我尝试了select-string,-match,trim,trimstart,trimend
到目前为止,这是我的代码
$name = Get-ADUser -SearchBase "OU=A,DC=B,DC=C,DC=edu"
-Filter {Created -ge $checktime}
|Select-Object SAMAccountName
foreach($object in $name){
$object
$studentid = $object.SAMAccountName.Substring(5,6)
$studentid
}
Run Code Online (Sandbox Code Playgroud)
mjo*_*nor 14
这与正则表达式很简单:
('jsmit123456') -replace '\D+(\d+)','$1'
123456
Run Code Online (Sandbox Code Playgroud)
\ D + =所有非数字,\ d + =后面的所有数字.
$studentid = $object.SAMAccountName -replace '\D+(\d+)','$1'
Run Code Online (Sandbox Code Playgroud)
小智 13
出于可读性的原因(我有时会发现regexp很难)我更喜欢这个解决方案:
'john123456smith' -replace "[^0-9]" , ''
123456
Run Code Online (Sandbox Code Playgroud)
替换所有不是数字的东西,[^ 0-9],什么也没有,''.这不涉及$ 1语法(正则表达式匹配的字符串)
与OP的问题略有不同,但我来到这里寻求答案,所以......
如果字符串中存在“第二”组数字,则这些数字都无法正确提取字符串中的第一个数字。
例如,在字符串“asld_1234_asdf3”上使用其他答案会产生诸如“12343”之类的内容(数字附加了额外的“3”)。
我的真实用例有一个分隔符 - “_” - 如示例所示:
$str = "asld_1234_asdf3";
$str -replace '.*_([0-9]*)_.*','$1'
# produces: 1234
Run Code Online (Sandbox Code Playgroud)
如果分隔符不起作用,您需要这个(顺便说一下,它也适用于上面带有分隔符的情况):
$str = "asldX1234Yasdf3";
$str -replace '\D+([0-9]*).*','$1'
# produces: 1234
Run Code Online (Sandbox Code Playgroud)
上述两个都根据我的情况产生“1234”。