我正在使用此正则表达式从分号分隔的字符串中解析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
遇到';'时如何停止解析?
答案 0 :(得分:1)
我个人只是修改正则表达式以使其专门用于URL,并向https://协议和www量词添加一些条件。使用\ S +可能有点麻烦,因为它将捕获每个非空白字符,而在URL中,该字符会限制您可以使用的字符。
这样的事情应该可以很好地满足您的特定需求。
(https?:\/{2})?([w]{3}.)?\w+\.[a-zA-Z]+
这为http
(也是可选的s
协议)设置了条件,然后://
将紧随其后。然后,它将抓取尽可能多的所有字母,数字和下划线,直到.
,然后是最后一个字符集结束为止。如果愿意,可以将[a-zA-Z]
字符集替换为一组明确的域。
答案 1 :(得分:1)
看看您的示例,我将匹配引号之间的任何URL。像这样:
(?<=")(?:https?:|www\.)[^"]*
或者就像其他人所说的那样,使用string.Split
用分号字符分隔输入字符串,然后顺序检查每个字符串是否符合您的期望。
答案 2 :(得分:1)
对于示例数据,您可以使用正向先行(?=
)和正向先行(?<=)
(?<=")(?:https?:|www\.).+?(?=;?\\")
那会匹配
(?<=")
肯定地说是在左边是双引号。(?:https?:|www\.)
将http与可选的s或www匹配。.+?
匹配任意字符一次或多次非贪婪(?=;?\\")
积极前瞻,断言其后是可选的;
,后跟\"