嗨,我正试着用powershell从一个用户id中获得号码。
我们使用的格式是第一个字母的名字,前四个字母的姓氏和学生,所以一个学生的名字约翰史密斯与Id# 123456将是jsmit123456的问题,如果用户有少于4个字母在他们的名字。所以使用子字符串会给出这些id的错误
我试过select-string,-match,trim,裁剪,裁剪
这是到目前为止我的代码
$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
}发布于 2014-05-16 14:16:47
这与正则表达式很简单:
('jsmit123456') -replace '\D+(\d+)','$1'
123456\D+ =所有非数字,\d+ =后面的所有数字。
$studentid = $object.SAMAccountName -replace '\D+(\d+)','$1'发布于 2017-10-24 11:07:24
出于可读性的原因(我有时觉得regexp很难读),我更喜欢这样的解决方案:
'john123456smith' -replace "[^0-9]" , ''
123456将所有不是数字的^0-9替换为空,'‘。这不涉及$1语法(由regex匹配的字符串)。
发布于 2019-03-13 19:05:44
跟OP的问题有点不同,但我来这里找答案,所以.
如果字符串中有“第二个”数字集,则这些数字中没有一个能正确提取字符串中的第一个数字。
例如,使用字符串"asld_1234_asdf3“上的其他答案会产生"12343”(附加于数字的"3“)之类的内容。
我的实际用例中有一个分隔符"_“,如示例中所示:
$str = "asld_1234_asdf3";
$str -replace '.*_([0-9]*)_.*','$1'
# produces: 1234如果分隔符不起作用,那么您需要这个分隔符(顺便说一句,这也适用于上面使用的定界符):
$str = "asldX1234Yasdf3";
$str -replace '\D+([0-9]*).*','$1'
# produces: 1234上述两种产品均按我的要求生产"1234“。
https://stackoverflow.com/questions/23697408
复制相似问题