MAC OSX, PowerShell 6.1 Core
我正在努力创建正确的 REGEX 模式以在 url 中间查找用户名字符串。简而言之,我正在使用Powershell Core 6.1,并拉下网页并删除"li"元素。我把它写到一个文件中,所以我有一堆这样的行:
<LI><A HREF="/grouplist/expand-user/jimmysmith">Smith, Jimmy</A>
我需要的字符串是"jimmysmith"部分,每行都有一个不同的用户名,不超过八个字母字符。我目前的模式是这样的:
(<(.|n)+?>)|( )
我可以在我的代码中使用"-replace $pattern"来抓取"史密斯,吉米"部分。我不知道自己在做什么,任何获得我所得到的成功都是面子运气。
在使用几个在线正则表达式助手后,我仍然坚持如何获取"第三个"/"之后的字符串,但不包括最后一个引号。
谢谢你能给我的任何帮助。
你可以变得超级简单,
expand-user/([^"]+)
找到展开用户,然后捕获直到报价。
(?:/.*){2}/(?<username>.*)"
(?:/.*)
匹配文本/
后跟任意数量的字符
{2}
做两次前一场比赛
/
匹配另一个/
(?<username>.*)"
将所有内容匹配到下一个"
并将其放入username
组。
https://regex101.com/r/0gj7yG/1
虽然,由于每一行在用户名之前大概都是相同的:
$line = ("<LI><A HREF="/grouplist/expand-user/jimmysmith">Smith, Jimmy</A> ")
$line = $line.Substring(36,$line.LastIndexOf("""))
答案是戴夫发布的内容。我通过以下方式将抓取的详细信息保存到一个文件(带有"li"的行(:
get-content .list.txt -ReadCount 1000| foreach-object { $_ -match "<li>"} |out-file .transform.txt
然后,我使用了Dave提出的方法,如下所示:
$a = get-content .transform.txt |select-string -pattern '(?:/.*){2}/(?<username>.*)"' | % {"$($_.matches.groups[1])"} |out-file .final.txt
我必须查找如何提取组名称,我使用此参考来弄清楚:如何从 Select-String 中获取捕获的组?