用于在斜杠上拆分的正则表达式

时间:2014-01-09 01:41:49

标签: python sql regex

我正在尝试拆分网址以获取域名。

example.com                => example.com
example.com/dir/index.html => example.com

我正在尝试的正则表达式是

(.+?)(/|$)

当我在python中使用它时:

import re
m = re.search('(.+?)(/|$)', url)

它适用于第一个,但对于第二个例子,我总是得到example.com/。我如何摆脱反斜杠?

编辑:我很抱歉,我忘了提供一个重要信息。我需要一个正则表达式,因为我需要在Oracle SQL中编写它。幸运的是,Oracle支持正则表达式,但没有像urlparse那样。我只是使用python进行测试。对不起!

2 个答案:

答案 0 :(得分:2)

执行此操作的简单方法是使用stdlib中的urlparse函数:

>>> from urllib.parse import urlparse
>>> url = 'http://example.com/dir/index.html'
>>> p = urlparse(url)
>>> p.netloc
'example.com'

除了简单得多之外,它处理你没有想到的明确定义和明确记录的案例(例如,如果有端口和主机?),而使用你的代码谁知道你没有预料到的任何情况会发生什么?


如果您确实希望将URL视为字符串而不是URL,则在斜杠上拆分的简便方法是在斜杠上拆分:

>>> bits = url.split('/')
>>> bits[2]
example.com

如果你真的想使用正则表达式来分割斜杠,你可以使用re.split而不是试图找出一种方法来欺骗re.search为你分裂:

>>> bits = re.split('/', url)
>>> bits[2]
example.com

最后,如果您想使用matchsearch,并且您不想捕获/,请不要将/放入一个捕获组,看看你想要捕获的组而不是整个字符串:

>>> url = 'example.com/dir/index.html'
>>> m = re.search('(.+?)(/|$)', url)
>>> m.groups()
('example.com', '/')
>>> m = re.search('(.+?)(?:/|$)', url)
>>> m.groups()
('example.com',)

答案 1 :(得分:0)

尝试匹配非正向斜杠,例如([^/]+?)(/|$)

相关问题