我的域名系统列表。它们应该以用户命名。有一个前缀用短划线用户名,可能还有一些数字或破折号。
这是我的源字符串:
PL-USERNAME1-7.corp.domain.com
cd-USERNAME03.corp.domain.com
ul-USERNAME.corp.domain.com
HID-USERNAME203.corp.domain.com
我只想匹配/提取USERNAME
我只是:
(([A-Z])+-)
编辑:
我也想要大小写混合用户名。
答案 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)
答案 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());