没有空格的多个网络链接的正则表达式?
Regex for multiple web links with no whitespace?
我正在尝试解析包含多个 YouTube 链接的字符串,但它们之间没有 white-space。链接也可以以 "http" 或 "https" 开头。示例字符串:
https://www.youtube.com/watch?v=abc123http://www.youtube.com/watch?v=abc123https://www.youtube.com/watch?v=abc123
所以里面有 3 个链接。我根本无法控制该字符串,因为它来自人们发布链接的聊天服务,然后我的工作是对 URL 进行正则表达式并记录下来。
这是我到目前为止提出的正则表达式:
(https?\:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/\S+
不过,当它看到字符串下方的模式时,我不确定如何让它中断。有人可以帮忙吗?
您可以在 http
上拆分,然后再将其添加回去:
var input = "https://www.youtube.com/watch?v=abc123http://www.youtube.com/watch?v=abc123https://www.youtube.com/watch?v=abc123";
var split = input.Split("http");
var urls = split.Select(x => "http" + x);
这当然假设 "http" 没有出现在 url 的其他任何地方...
如果您在创建字符串时添加了某种分隔符,例如 "|"
,那么您可以很容易地拆分它。
var videoUrls = input.Split("|");
这是一个正则表达式,它将拆分连接的链接。请注意,我已将链接重命名为 111、222 和 333,以便于调试:
string data = "https://www.youtube.com/watch?v=abc111http://www.youtube.com/watch?v=abc222https://www.youtube.com/watch?v=abc333";
string pattern = @"(?<YouTubeLink>https?.+?)(?=http|$)";
Regex.Matches(data, pattern)
.OfType<Match>()
.Select (mt => mt.Groups["YouTubeLink"].Value);
/* The above results in an IEnumerable of these strings:
https://www.youtube.com/watch?v=abc111
http://www.youtube.com/watch?v=abc222
https://www.youtube.com/watch?v=abc333
*/
解释:
(?< > )
: Named match capture for easier post regex processing data extraction.
s?
: To capture http and the s
is optional ?
for https
.+?
: capture as minimal as possible
(?= )
: Look ahead, to stop the .+?
from grabbing more text.
http|$
: look ahead to stop on a new http or end of the data.
我正在尝试解析包含多个 YouTube 链接的字符串,但它们之间没有 white-space。链接也可以以 "http" 或 "https" 开头。示例字符串:
https://www.youtube.com/watch?v=abc123http://www.youtube.com/watch?v=abc123https://www.youtube.com/watch?v=abc123
所以里面有 3 个链接。我根本无法控制该字符串,因为它来自人们发布链接的聊天服务,然后我的工作是对 URL 进行正则表达式并记录下来。
这是我到目前为止提出的正则表达式:
(https?\:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/\S+
不过,当它看到字符串下方的模式时,我不确定如何让它中断。有人可以帮忙吗?
您可以在 http
上拆分,然后再将其添加回去:
var input = "https://www.youtube.com/watch?v=abc123http://www.youtube.com/watch?v=abc123https://www.youtube.com/watch?v=abc123";
var split = input.Split("http");
var urls = split.Select(x => "http" + x);
这当然假设 "http" 没有出现在 url 的其他任何地方...
如果您在创建字符串时添加了某种分隔符,例如 "|"
,那么您可以很容易地拆分它。
var videoUrls = input.Split("|");
这是一个正则表达式,它将拆分连接的链接。请注意,我已将链接重命名为 111、222 和 333,以便于调试:
string data = "https://www.youtube.com/watch?v=abc111http://www.youtube.com/watch?v=abc222https://www.youtube.com/watch?v=abc333";
string pattern = @"(?<YouTubeLink>https?.+?)(?=http|$)";
Regex.Matches(data, pattern)
.OfType<Match>()
.Select (mt => mt.Groups["YouTubeLink"].Value);
/* The above results in an IEnumerable of these strings:
https://www.youtube.com/watch?v=abc111
http://www.youtube.com/watch?v=abc222
https://www.youtube.com/watch?v=abc333
*/
解释:
(?< > )
: Named match capture for easier post regex processing data extraction.s?
: To capture http and thes
is optional?
for https.+?
: capture as minimal as possible(?= )
: Look ahead, to stop the.+?
from grabbing more text.http|$
: look ahead to stop on a new http or end of the data.