gpt4 book ai didi

regex - 2行正则表达式

转载 作者:行者123 更新时间:2023-12-02 23:03:14 24 4
gpt4 key购买 nike

我正在尝试在文本文件中搜索 2 行文本(一行总是放在另一行之后)。其中一行始终相同:#EXTINF:Discovery Science。然而,第二个总是不同的,但具有以下模式:“http://”ipaddress“:”一些随机端口IP地址“:”随机端口

示例:

#EXTINF:Discovery Science http://95.188.124.44:1234/udp/233.7.70.27:5000

这是我的代码:

$file = "C:\1.m3u"
$Text = [IO.File]::ReadAllText($file)
[regex]$reg = "([#EXTINF:Discovery Science http://\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b])"
$match = $reg.match($Text)
$array = @()
$array = new-object collections.arraylist
$array = while ($match.Success)
{
$match.Groups[1].value
$match = $match.nextMatch()
write-host $match
}

最佳答案

为了匹配任何空格,您可以使用 \s+ (1 个或多个空格)。另外,我假设 #EXTINF:Discovery Science 文本是已知的,因此使用捕获组捕获它是没有意义的,我建议将 ( 移到http

还有一点是,这个表达式中的 \b 是多余的,其中最糟糕的部分是由 [...] 形成的字符类 。请注意,字符类与方括号内指定符号集中的 1 个符号匹配。您只需删除它们即可。

这是一个返回http://95.188.124.44的工作演示:

$Text = "#EXTINF:Discovery Science`r`nhttp://95.188.124.44:1234/udp/233.7.70.27:5000"
[regex]$reg = "#EXTINF:Discovery Science\s+(http://\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})"
$match = $reg.match($Text)
$array = @()
$array = new-object collections.arraylist
$array = while ($match.Success)
{
write-host $match.Groups[1].value
$match = $match.nextMatch()
}

如果您需要包含端口号 :5000,只需将 :\d+ 添加到正则表达式中即可:

[regex]$reg = "#EXTINF:Discovery Science\s+(http://\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d+)"

如果您只需要在http之后获取1个或多个非空白符号,请使用:

[regex]$reg = "#EXTINF:Discovery Science\s+(http://\S+)"

关于regex - 2行正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34151379/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com