正则表达式从域中提取用户名

时间:2015-05-06 15:42:15

标签: regex powershell

我的域名系统列表。它们应该以用户命名。有一个前缀用短划线用户名,可能还有一些数字或破折号。

这是我的源字符串:

PL-USERNAME1-7.corp.domain.com
cd-USERNAME03.corp.domain.com
ul-USERNAME.corp.domain.com
HID-USERNAME203.corp.domain.com

我只想匹配/提取USERNAME

我只是:

(([A-Z])+-)

编辑:

我也想要大小写混合用户名。

3 个答案:

答案 0 :(得分:2)

您可以使用以下模式:

^\w+-([A-Z]+)

它将匹配:

^       # The start of the string
\w+     # One or more word characters (the prefix)
-       # -
[A-Z]+  # One or more letters (the username)

演示:

PS > $str = @"
PL-USERNAME1-7.corp.domain.com
cd-USERNAME03.corp.domain.com
ul-USERNAME.corp.domain.com
HID-USERNAME203.corp.domain.com
"@
PS > foreach ($line in $str.Split("`n")) {
         $line -match '^\w+-([A-Z]+)' > $null
         $Matches[1]
     }
USERNAME
USERNAME
USERNAME
USERNAME
PS > 

答案 1 :(得分:1)

您可以使用以下正则表达式:

^[^-]+-(.*?)[-0-9]*\.corp\.domain\.com$

用户名将位于第一个捕获组

Example

答案 2 :(得分:0)

假设用户名中没有.,我可以想出的最可读的Regex位是:

(?<=-)[^.]*
PL-USERNAME1-7.corp.domain.com -MATCHES- PL-USERNAME1-7
cd-USERNAME03.corp.domain.com -MATCHES- cd-USERNAME03
ul-USERNAME.corp.domain.com -MATCHES- ul-USERNAME
HID-USERNAME203.corp.domain.com -MATCHES- HID-USERNAME203

正则表达式的作用基本上是在- .之后的任何内容匹配arr1[i] = (Math.random());