如果我有一个字符串,它总是以http://
开头,并可选地以/
跟随。示例:
http://www.mymovies.com/
但有时可以采用以下格式: http://www.mymovies.com
我要提取www.mymoviews.com
我想同时捕获两种格式(带/不带/
)
我尝试使用:
import re
print(re.search('http://(.*)/','http://www.mymovies.com').group(1))
但是我得到这个错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
1)如何解决错误
2)如何同时捕获有无以下/
字符(因为我的解决方案需要/
答案 0 :(得分:1)
您可以使用
m = re.search(r'https?://([^/]*)/?','http://www.mymovies.com')
if m:
print(m.group(1))
请参见regex demo
详细信息
http
-http
子字符串s?
-1或0 s
个字符://
-一个://
子字符串([^/]*)
-捕获组1:/
以外的零个或多个字符/?
-1或0 /
个字符。 Python demo(输出四个www.mymovies.com
作为输出):
import re
strs = ['http://www.mymovies.com/','http://www.mymovies.com','https://www.mymovies.com/','https://www.mymovies.com']
r = re.compile(r'https?://([^/]*)/?')
for s in strs:
m = r.search('http://www.mymovies.com')
if m:
print(m.group(1))
答案 1 :(得分:0)
您的搜索字符串为http://(.*)/
,因此末尾的/
是必填项。如果将?
放在其后,则可以将其设为可选,也可以完全不使用它。如果您不希望它成为结果字符串的一部分,则可以将其前面的匹配字符限制为除/
以外的所有字符:
https://([^/]*)
或在操作后进行简单的最后一个字符检查,如果是/
,则将其删除:
if result[-1] == "/": result = result[:-1]
还应注意,如果您输入的内容可以是完整的URL(包括路径和?key=value
对),则应进一步限制匹配的字符。
答案 2 :(得分:0)
尝试使用正则表达式:(?<=http:\/\/)\[^\/\]+?(?=\/|$)
答案 3 :(得分:0)
您可以使用split()方法在不使用正则表达式的情况下进行操作:
url.split("/")[2]
'http://www.mymovies.com/'.split("/")[2] ==> "www.mymovies.com"
'http://www.mymovies.com'.split("/")[2] ==> "www.mymovies.com"
'http://www.mymovies.com/star-wars/episodeV'.split("/")[2] ==> "www.mymovies.com"