-1

MAC OSX,PowerShell 6.1 核心

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

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

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

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

我可以在我的代码中使用“-replace $pattern”来获取“Smith, Jimmy”部分。我不知道自己在做什么,而获得我所得到的任何成功都是靠运气。

在使用了几个在线正则表达式助手后,我仍然坚持如何在第三个“/”之后获取“字符串”,但不包括最后一个引号。

谢谢你能给我的任何帮助。

4

3 回答 3

1

你可以超级简单,

expand-user/([^"]+)

找到expand-user,然后捕获直到报价。

于 2018-05-04T16:05:33.907 回答
0

答案是戴夫发布的内容。我通过执行以下操作将抓取的详细信息保存到文件(带有“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 中获取捕获的组?

于 2018-05-07T15:32:58.223 回答
0
(?:\/.*){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("\""))
于 2018-05-04T16:03:05.403 回答