Как удалить дополнительное добавление отступа Python трижды заключенные в кавычки многострочные строки?

У меня есть редактор Python, где пользователь вводит сценарий или код, который затем помещается в основной метод негласно, также располагая каждую строку с отступом. Проблема состоит в том, что, если у пользователя есть много строка строки, добавление отступа, сделанное к целому сценарию, влияет на строку путем вставки вкладки в каждое пространство. Проблемный сценарий был бы чем-то столь же простым как:

"""foo
bar
foo2"""

Таким образом, когда в основном методе это было бы похоже:

def main():
    """foo
    bar
    foo2"""

и строка теперь имела бы дополнительную вкладку в начале каждой строки.

58
задан codeforester 14 July 2019 в 00:01
поделиться

4 ответа

Итак, если я понял, вы берете все, что вводит пользователь, делаете отступ и добавляете к остальной части вашей программы (а затем запускаете всю программу) .

Итак, после того, как вы поместите пользовательский ввод в свою программу, вы можете запустить регулярное выражение, которое в основном возвращает этот принудительный отступ. Примерно так: в трех кавычках заменить все «маркеры новой строки»

-5
ответ дан 24 November 2019 в 18:44
поделиться

Единственный способ, который я вижу, - это убрать первые n табуляций для каждой строки, начинающейся со второй, где n - известный идентификатор основного метода.

Если эта идентификация заранее не известна - вы можете добавить завершающую новую строку перед ее вставкой и удалить количество табуляций из последней строки ...

Третье решение - проанализировать данные и найти начало многострочной кавычки, а не добавляйте свой идентификатор в каждую строку после того, как она будет закрыта.

Думаю, есть лучшее решение ..

1
ответ дан 24 November 2019 в 18:44
поделиться

textwrap.dedent from the standard library is there to automatically undo the wacky indentation.

108
ответ дан 24 November 2019 в 18:44
поделиться

То, что следует за первой строкой многострочной строки, является частью строки и не рассматривается анализатором как отступ. Вы можете свободно писать:

def main():
    """foo
bar
foo2"""
    pass

, и он будет поступать правильно.

С другой стороны, это не читается, и Python это знает. Поэтому, если строка документации содержит пробелы в своей второй строке, это количество пробелов удаляется, когда вы используете help () для просмотра строки документации. Таким образом, help (main) и приведенная ниже help (main2) создают одинаковую справочную информацию.

def main2():
    """foo
    bar
    foo2"""
    pass
17
ответ дан 24 November 2019 в 18:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: