C# 遇到分号后,Regex停止解析

C# 遇到分号后,Regex停止解析,c#,regex,C#,Regex,我使用这个正则表达式从分号分隔的字符串解析URL \b(?:https?:|http?:|www\.)\S+\b 如果我的输入文本采用以下格式,则工作正常: "Google;\"https://google.com\"" //output - https://google.com "Yahoo;\"www.yahoo.com\"" //output - www.yahoo.com 但在这种情况下,它给出了不正确的字符串 "https://google.com;\"https:

我使用这个正则表达式从分号分隔的字符串解析URL

\b(?:https?:|http?:|www\.)\S+\b
如果我的输入文本采用以下格式,则工作正常:

    "Google;\"https://google.com\""
//output - https://google.com
    "Yahoo;\"www.yahoo.com\""
//output - www.yahoo.com
但在这种情况下,它给出了不正确的字符串

"https://google.com;\"https://google.com\"" 
//output - https://google.com;\"https://google.com

遇到“;”时,如何停止解析

我个人只需修改正则表达式,专门查找URL,并向https://协议和www量词添加一些条件。使用\S+可能有点不确定,因为它将捕获URL中的每个非空白字符,而在URL中,它仅限于您可以使用的字符

像这样的东西应该适合你的特殊需要

(https?:\/{2})?([w]{3}.)?\w+\.[a-zA-Z]+

这在
http
s
也是可选的)协议上设置了一个条件,然后紧接着是
://
。然后,它将抓取尽可能多的字母、数字和下划线,直到
,然后是最后一组字符结束。如果愿意,您可以将
[a-zA-Z]
字符集交换为一组显式的域。

看看您的示例,我只想在引号之间匹配任何URL。大概是这样的:

(?<=")(?:https?:|www\.)[^"]*

(?对于示例数据,您可以使用正向先行
(?=
)和正向后向
(?您可以先在字符串上做一个子字符串,将字符串解析到第一个半colin,然后在字符串的该部分使用正则表达式是的,在
上拆分字符串,然后根据需要在每个子字符串上运行正则表达式。您需要反斜杠第一个正斜杠
\/{2}
@i--为什么?正斜杠不是需要转义的字符。好吧,我收回它,因为我不太熟悉C#,只是在javascript浏览器控制台中测试时出错了。@i--很公平。我想我会添加它以增强健壮性。谢谢。