https://codefights.com/interview/wqveBLtNtfByaEnfW
虽然我理解如何使用for循环来解决这个问题,但我想知道我是否只能使用正则表达式来解决问题。
我已经尝试了以下但是它不起作用......
import re
def simplifyPath(path):
path = re.sub(r'/[a-zA-Z]{1,}/\.\./', '/', path)
path = re.sub(r'//' , '/', path)
path = re.sub(r'/\./', '/', path)
return path
答案 0 :(得分:0)
虽然我们可能会详细说明一些棘手的正则表达式(使用递归和PyPi正则表达式):
(?<=\/)\/|(?<!\.)\.(?:\/|$)|((?:\w+\/)\g<1>?\.\.(?:\/|$))|\/+$
它会相当复杂,可能仍未覆盖所有边缘情况:请参阅demo。
应用一系列简单的正则表达式似乎是最可行的解决方案:
path = '/' + path # secure from missing root
path = re.sub(r'/+', '/', path) # remove any slash repetitions
path = re.sub(r'(?<!\.)\.(?:/|$)', '', path) # remove any "./"
while True: # remove any "dir/../"
pp = re.sub(r'\w+\/\.\.(?:/|$)', '', path)
if pp == path: # NB: we have to do this in a
break # loop until path remains unchanged
else: # to cope with input like this:
path = pp # '/a/b/../c/../../d'
path = re.sub(r'\.\.(?:/|$)', '', path) # remove oustanding '../' (cf. '/a/../../b')
path = re.sub(r'/$', '', path) # remove trailing slash
答案 1 :(得分:-1)
为什么在有python时使用正则表达式。 正则表达式可调试性差,可读性差。 我之所以给它,是因为很多错误和语言不好
在python中它只是dirs = split(“/”)然后从头开始吃dirs。
testdirs=["a/b/../c/d/e/./f","p/q/r/..","e/../..","e/."]
for dir in testdirs:
simpdir=dir.split("/")
out=[]
for branch in simpdir:
if branch=="..":
if len(out)!=0:
out.pop(-1)
elif branch!=".":
out.append(branch)
print "/".join(out)