在PowerShell 6.1 Core中匹配URL中用户名的正则表达式问题
提取URL中的用户名解决方案(PowerShell 6.1 Core on Mac OSX)
嘿,我来帮你搞定这个正则提取的问题!针对你给出的行格式,咱们可以用精准的正则配合PowerShell的命令轻松拿到用户名。
思路分析
你的目标行结构是:<LI><A HREF="/grouplist/expand-user/jimmysmith">Smith, Jimmy</A> ,用户名是HREF属性里最后一个斜杠/之后、双引号"之前的部分。我们只需要用正则捕获这一段内容就行。
具体实现
1. 精准匹配固定前缀的正则
因为你的HREF前缀是固定的/grouplist/expand-user/,所以用这个正则最稳妥,不会误匹配其他内容:
/grouplist/expand-user/([^"]+)
([^"]+)是核心捕获组:[^"]表示匹配不是双引号的任意字符,+表示匹配1次或多次,刚好能把用户名完整抓出来。
2. PowerShell执行命令
假设你的文件名为user_list.txt,可以用下面两种方式提取:
方式一:用Get-Content配合-match
Get-Content ./user_list.txt | ForEach-Object { # 对每行进行正则匹配 if ($_ -match '/grouplist/expand-user/([^"]+)') { # $matches[1]就是捕获到的用户名 $matches[1] } }
方式二:用Select-String批量匹配
Select-String -Path ./user_list.txt -Pattern '/grouplist/expand-user/([^"]+)' | ForEach-Object { # 从匹配结果中提取捕获组的内容 $_.Matches.Groups[1].Value }
通用场景扩展
如果以后HREF的前缀可能变化,但用户名始终在最后一个斜杠到引号之间,你可以用更通用的正则:
HREF=".*?/([^"]+)"
.*?是非贪婪匹配任意字符,确保找到的是最后一个斜杠后面的内容。
小提示
- PowerShell默认正则不区分大小写,如果需要严格区分,把
-match换成-cmatch即可。 - 执行完命令后,你可以用
Out-File把结果写入新文件,比如在命令末尾加| Out-File ./extracted_usernames.txt。
内容的提问来源于stack exchange,提问作者JasonH
相关产品推荐
相关产品推荐

