Python可以通过这样的简写语法生成具有多个子路径的路径吗?
vars=project/{DEBIAN,usr/{bin,usr/{applications,icons,share}},computer}
最佳答案
通常我会建议使用类似的东西
def extend(base, *others):
[base + o for o in others] if others else [base]
然后做
extend("project", "/debian", *extend("/usr", *(extend("/bin") + extend("/usr", "/applications", "/icons", "/share"))))
。但由于您更喜欢解析字符串,我尝试提供一种替代方案:
def commasplit(s):
start = 0
level = 0
for i, c in enumerate(s):
if c == '{':
level += 1
elif c == '}':
level -= 1
elif c == ',' and level == 0:
yield s[start:i]
start = i+1
yield s[start:]
def split(s):
import re
found = False
for m in re.finditer("(\{.*\})",s):
found = True
for p in commasplit(s[m.start() + 1:m.end() - 1]):
for i in split(p):
yield s[:m.start()] + i + s[m.end():]
if not found:
yield s
cs = "a,b,c,{d,e,f},g"
print list(commasplit(cs)) # -> seems to work
s = "project/{DEBIAN,usr/{bin,usr/{applications,icons,share}},computer}"
print s
for n, i in enumerate(split(s)): print n, i # -> as well.
关于python - python 在 bash 中可以像这样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12993497/