我有其中用户输入脚本或代码,然后将其放入幕后的重要手段,同时还具有缩进每行一个Python编辑器。 问题是,如果用户有一个多行字符串,整个脚本所做的压痕影响字符串,通过在每一个空间插入选项卡。 一个问题脚本是这么简单的东西如:
"""foo
bar
foo2"""
因此,当在main方法它会是什么样子:
def main():
"""foo
bar
foo2"""
和字符串现在将不得不在每行的开始一个额外的标签。
我有其中用户输入脚本或代码,然后将其放入幕后的重要手段,同时还具有缩进每行一个Python编辑器。 问题是,如果用户有一个多行字符串,整个脚本所做的压痕影响字符串,通过在每一个空间插入选项卡。 一个问题脚本是这么简单的东西如:
"""foo
bar
foo2"""
因此,当在main方法它会是什么样子:
def main():
"""foo
bar
foo2"""
和字符串现在将不得不在每行的开始一个额外的标签。
所以,如果我正确地得到它,你采取任何用户输入正确的缩进,并把它添加到你的程序的其余部分(然后运行整个程序)。
所以你把用户输入到你的程序后,你可以运行一个正则表达式,基本上采取的是强制缩进回来。 是这样的:在3个报价,只有一个“新行标记”全部替换“新行标志”后面四个空格(或标签)。
textwrap.dedent标准库中是有自动撤消古怪的压痕。
从我所看到的,在这里一个更好的答案可能是inspect.cleandoc
,这确实在功能上有什么textwrap.dedent
确实也解决了问题, textwrap.dedent
与领先的线。 下面的例子示出的差异:
>>> import textwrap
>>> import inspect
>>> x = """foo bar
baz
foobar
foobaz
"""
>>> inspect.cleandoc(x)
'foo bar\nbaz\nfoobar\nfoobaz'
>>> textwrap.dedent(x)
'foo bar\n baz\n foobar\n foobaz\n'
>>> y = """
... foo
... bar
... """
>>> textwrap.dedent(y)
'\nfoo\nbar\n'
>>> inspect.cleandoc(y)
'foo\nbar'
接下来一个多行字符串的第一行是字符串的一部分,而不应被视为解析器缩进。 你可以自由地写:
def main():
"""foo
bar
foo2"""
pass
它会做正确的事。
在另一方面,这不是可读的,Python知道它。 所以,如果一个文档字符串包含空格,在它的第二行,空白的那个量,当您使用扒掉help()
查看文档字符串。 因此, help(main)
和下面的help(main2)
产生相同的帮助信息。
def main2():
"""foo
bar
foo2"""
pass
我看到的唯一方式 - 是剥去第一n凸片每行开始第二,其中n是已知的主要方法identation。
如果identation事先不知道 - 你可以添加插入之前换行符和最后一行剥去标签的数...
第三种解决方案是分析数据,发现多报价的开始,不,直到它会被关闭后,您identation添加到每一行。
认为这是一个更好的解决方案..