© 2014 <a href="http://www.fairfaxmedia.co.nz">Fairfax New Zealand Limited</a><br/>
<a href="/about-stuff/legal/25044/privacy-policy">Privacy</a><!-- |
以上是我的HTML文档中的违规部分。
以下是我的正则表达式。它适用于我的文档中的每个其他URL。除了这一个。
urliter = re.finditer(r'(http://|https://)([\w]+\.[\w\.]+\/?)([\w\/\.]+")',lines)
urlMatches = defaultdict(list)
for match in urliter:
urlMatches[match.group(2)].append(match.group())
当我查看输出时,出于某种原因,www.fairfaxmedia.co.nz
会在结尾处切断z
,因此它只显示www.fairfaxmedia.co.n
的{{1}}
我无法弄清楚为什么会这样?
另外,问题#2 - 我如何仅在报价中搜索网址,但是将报价保留在匹配项之外?
答案 0 :(得分:1)
你的正则表达式使用捕获组:
(http://|https://)
匹配(并在第1组中捕获)http
部分([\w]+\.[\w\.]+\/?)
在第二组中捕获([\w\/\.]+")
在第三组中捕获由于您在+
中放置了([\w\/\.]+")
,因此字符类[\w\/\.]
无法匹配任何字符。这意味着在http://www.fairfaxmedia.co.nz"
中,最后一个组必须至少匹配z"
。
因此,z
不能出现在第二组(您正在呼叫的那个)中,插图为here。
如果您只想将域名与网址的其余部分分开,可以将您的正则表达式调整为:
"(https?://(\w+\.[\w.]+)(/?[\w/.-]*))"
整个网址(不含引号)位于捕获组1,捕获组2中的域名,捕获组3中的其余区域:请参阅demo here。
答案 1 :(得分:0)
要在引号中搜索文字,但在引号中留下引文,您可以使用外观断言。
例如(从罗宾斯回答的核心正则表达式)
(?<=\")(https?://(\w+\.[\w.]+)(/?[\w\/\.]*))(?=\")