如何在Python代码中将缩进标题翻译为编号标题

问题描述 投票:0回答:1

我有一个缩进形式的目录来保持关系,例如:

- 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

我自己尝试过,但大部分都转成了想要的格式,但有些不能,任何人都可以提供完美的代码,谢谢先进!

python tableofcontents
1个回答
0
投票

您可以使用 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
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.