我有一个缩进形式的目录来保持关系,例如:
- title1
-- title1-1
-- title1-2
--- title1-2-1
--- title1-2-2
- title2
-- title2-1
-- title2-2
- title3
- title4
我想要的是将其翻译成编号格式,例如:
1 title1
1.1 title1-1
1.2 title1-2
1.2.1 title1-2-1
1.2.2 title1-2-2
2 title2
2.1title2-1
2.2 title2-2
3 title3
4 title4
我自己尝试过,但大部分都转成了想要的格式,但有些不能,任何人都可以提供完美的代码,谢谢先进!
您可以使用 re.sub
的
replacer回调来实现逻辑。在该回调中,使用堆栈(在多个替换中维护)来跟踪上“级别”的章节号。
代码:
import re
def add_numbers(s):
stack = [0]
def replacer(s):
indent = len(s.group(0)) - 1
del stack[indent+1:]
if indent >= len(stack):
stack.append(0)
stack[indent] += 1
return ".".join(map(str,stack))
return re.sub(r"^-+", replacer, s, flags=re.M)
以下是您在示例中的调用方式:
message_string = """- title1
-- title1-1
-- title1-2
--- title1-2-1
--- title1-2-2
- title2
-- title2-1
-- title2-2
- title3
- title4"""
res = add_numbers(message_string)
print(res)
打印:
1 title1
1.1 title1-1
1.2 title1-2
1.2.1 title1-2-1
1.2.2 title1-2-2
2 title2
2.1 title2-1
2.2 title2-2
3 title3
4 title4