многострочное регулярное выражение yaml

#python #regex #yaml #pre-commit #pre-commit.com

#python #регулярное выражение #yaml #предварительная фиксация #pre-commit.com

Вопрос:

Я хотел бы написать pygrep хук, с pre-commit помощью которого можно найти случаи, например

     .. warning:
  

(когда это должно быть .. warning:: ).

Если я напишу

 -   repo: local
    -   id: incorrect-sphinx-directives
        name: Check for incorrect Sphinx directives
        language: pygrep
        entry: .. (autosummary|contents|currentmodule|deprecated|function|image|important|include|ipython|literalinclude|math|module|note|raw|seealso|toctree|versionadded|versionchanged|warning):[^:]
        files: .(py|pyx|rst)$
  

тогда это работает — однако строка нечитаемо длинная. Есть ли способ разделить его на несколько строк?

Я пытался

         entry: "
            .. (autosummary|contents|currentmodule|deprecated
            |function|image|important|include|ipython
            |literalinclude|math|module|note|raw|seealso
            |toctree|versionadded|versionchanged|warning
            ):[^:]"
  

но это не работает (результирующее регулярное выражение отличается).

Есть предложения?

Комментарии:

1. Я не использую регулярное выражение для изменения yaml, не уверен, что вы там имеете в виду

Ответ №1:

Как указано в документации, вы можете использовать подробное выражение:

         entry: |
            (?x)^(
                thing|
                other_thing|
                other_other_thing
            )$
  

Комментарии:

1.Возможно, стоит упомянуть, что на самом | деле делает. Использование > также может быть жизнеспособным.

2. @DaSourcerer это не имеет значения для подробных регулярных выражений python, которые игнорируют внешние пробелы

3. Верно. Имхо, это все еще особенность YAML, которую полезно знать.

4. конечно, но это не имеет значения для этого Q amp; A

Ответ №2:

Решение заключалось в том, чтобы сделать

         entry: "
            \.\. (autosummary|contents|currentmodule|deprecated
            |function|image|important|include|ipython
            |literalinclude|math|module|note|raw|seealso
            |toctree|versionadded|versionchanged|warning
            ):[^:]"