我一直在写一个简单的方法来检查一个网址是否有子目录,如果有子目录,就把它们分成一个列表。我编写的代码应该忽略URL的最后一个子目录(这是一个错误,因为我注意到循环在用一个子目录检查URL时迭代了大约4次)。你知道吗
代码如下:
import re
def check_web_address(web_address):
#set the pattern, then check if it matches
pattern = re.compile(r"[\w\-\.]*")
pat_check = pattern.match(web_address)
#if it does, separate the subdirs, assuming we checked for '/' earlier
if pat_check:
pattern_span = pat_check.span()
web_add_no_subdir = web_address[pattern_span[0]:pattern_span[1]]
raw_web_subs = web_address[pattern_span[1]:]
web_subs = []
"""Check if there is an additional slash,
then separate our subdir if the regex matches."""
slash = "/"
for slash in raw_web_subs[1:]:
pat_span = pattern.match(raw_web_subs[1:]).span()
real_end = pat_span[1]+1
web_subs.append(raw_web_subs[:real_end])
raw_web_subs = raw_web_subs[real_end:]
separated = [
web_add_no_subdir,
web_subs
]
return separated
else:
return None
这段代码实际上返回了一个子目录,正如我的unittest所说,它成功地运行了测试:
checked_add = wc.check_web_address("www.google.com/docs")
self.assertEqual(checked_add[0], 'www.google.com')
self.assertEqual(checked_add[1][0], '/docs')
因此,我在python控制台中测试了以下内容:
>>test = "/docs"
>>"/" in test[1:]
false
另外,如果我让python打印
raw_web_subs[1:]
在循环开始之前,我得到字符串“docs”,没有正斜杠。你知道吗
我错过了什么?你知道吗
正如@tadhgmandald Jensen所解释的,现在的情况是Python正在迭代每个字符,@Evert建议使用一个'while'循环,它给出了我最初想要的结果。你知道吗
我可能会像@Blckknght建议的那样使用urllib.parse。你知道吗
@thelazyscript提到,还可以使用test=some\u string来分隔字符串_url.split文件('/'). 这是一个比我想象的更优雅的解决方案。你知道吗
谢谢大家。你知道吗
相关问题 更多 >
编程相关推荐