我是Python的新手,我不确定应该寻找什么,但我向你保证我已经完成了我的研究,并且仍然想出了一个相当丑陋的20行长的代码块来解决这个问题。
我正在使用基于Pyramid框架的应用程序处理遍历URL。
现在,URL可以是:(url = None)
网址不包含任何内容。在这种情况下,我希望我的函数返回False,None或空列表或元组。 (无关紧要。)(匹配选项0或1)
Block_1:这是一个单词,一个到Z字符串。不能也不应该包含任何特殊字符。事实上,作为block_1获取的内容,应该在字典(或列表)中,如果没有找到,则应该引发并返回错误。如果block_1不存在或未找到,则如上所述,该函数应返回False,None或空列表或元组。 (匹配选项2和3)
Block_2:Block_2可以是任何东西。为简单起见,它可以包含任何语言的任何字符以及特殊字符,例如:()[]。如果我错了,请原谅我,但我认为我想要的基本上是为了匹配[\pL\pN].*
,但有一个例外:它的最后一个字符不能是斜杠:既不是"\"
也不是{{} 1}}。最好,我希望它是"/"
(我特别定义如上所述:()和[])。如果没有给出block_2,则它应该具有值None,如果它不匹配,则它应该返回False。 (匹配上面列出的最后两个选项)
我的代码开头,相当原始,我道歉:
a to Z (including all languages' alphabets and their accented characters) along with some other characters from a list
对不起,如果我的代码很糟糕而且过于复杂。我只想要一种更优雅,更好的方式来做这件事。
那我怎么办呢?我该怎么做才能摆脱这些卡住的代码?
谢谢。
答案 0 :(得分:4)
split('/')
,这应该可以帮助您解析URL。
如果这还不够,则应使用urlparse
来解析
urlparse.urlparse(path)
In [31]: url = 'http://stackoverflow.com/questions/12809298/how-can-i-separate-this-into-two-strings/12809315#12809315'
In [32]: urlparse.urlparse(url)
Out[32]: ParseResult(scheme='http', netloc='stackoverflow.com', path='/questions/12809298/how-can-i-separate-this-into-two-strings/12809315', params='', query='', fragment='12809315')
In [33]: a = urlparse.urlparse(url)
In [34]: a.path
Out[34]: '/questions/12809298/how-can-i-separate-this-into-two-strings/12809315'
In [35]: a.path.split('/')
Out[35]:
['',
'questions',
'12809298',
'how-can-i-separate-this-into-two-strings',
'12809315']
答案 1 :(得分:2)
我要尝试的第一件事是.split()
string function:
>>> url = "/block_1/block_2"
>>> url.split("/")
['', 'block_1', 'block_2']
这将返回字符串的组件列表,这些组件由/
字符分隔。从那里,您可以使用len()
函数找出列表的长度,并根据您所需的逻辑采取适当的操作。