较长字符串中用户名的正则表达式模式



MAC OSX, PowerShell 6.1 Core

我正在努力创建正确的 REGEX 模式以在 url 中间查找用户名字符串。简而言之,我正在使用Powershell Core 6.1,并拉下网页并删除"li"元素。我把它写到一个文件中,所以我有一堆这样的行:

<LI><A HREF="/grouplist/expand-user/jimmysmith">Smith, Jimmy</A>&nbsp;

我需要的字符串是"jimmysmith"部分,每行都有一个不同的用户名,不超过八个字母字符。我目前的模式是这样的:

(<(.|n)+?>)|(&nbsp;) 

我可以在我的代码中使用"-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>&nbsp;")
$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 中获取捕获的组?

相关内容

  • 没有找到相关文章

最新更新