斜杠上拆分的正则表达式

2024-04-24 21:00:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试分割网址,以获得域名。你知道吗

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

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

(.+?)(/|$)

当我在python中这样使用它时:

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

它适用于第一个例子,但是对于第二个例子,我总是得到example.com/。我怎么去掉反斜杠?你知道吗

编辑:我很抱歉,我忘了包括一个重要的信息。我需要一个正则表达式,因为我需要用oraclesql来编写它。幸运的是,Oracle支持regex,但与urlparse不同。我只是在用python进行测试。很抱歉!你知道吗


Tags: importrecom信息url编辑searchindex
2条回答

最简单的方法是使用stdlib中的^{}函数:

>>> 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

如果您真的想使用regexp在斜杠上拆分,您可以使用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',)

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

相关问题 更多 >