Regex для ??? (три смежных вопросительных знака) кодовая метка для использования в PyCharm - PullRequest
1 голос
/ 04 мая 2020

Я пытаюсь использовать PEP 350 - Codetags еще в моем Python коде.

Моя IDE - PyCharm, и в настоящее время я расширяю регулярное выражение комментариев TODO. Он находится в меню TODO (Preferences > Editor > TODO). Регулярное выражение PyCharm по умолчанию использовало границу слова \b.

В настоящее время я расширил его до: \b(todoc*|fixme|caveat|see)\b.*

Я играл с регулярным выражением 101, но на всю жизнь могу ' t найти способ захватить следующие теги кода:

  • ??? (вопрос)
  • !!! (предупреждение)

** изменить : кто-то спросил в комментариях, хочу ли я сопоставить конец слова со специальными символами (например: foo!!!). Я бы не стал, обычно комментарий будет выглядеть как !!! some information.

** edit 2: теги кода могут сопровождаться двоеточием (например: TODO:, CAVEAT:), поэтому регулярное выражение должно быть гибкий в этом отношении.


Что я пробовал

Regex для трех точек?

  • \b(todoc*|fixme|caveat|see|\?\?\?)\b.*
  • И другие аналогичные перестановки, включающие кавычки и двойные косые черты, до сих пор ни одна не работала

Версии

  • PyCharm 2020.1 PE

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Вместо использования границ слов \b вы можете использовать границы пробелов и добавить |!!! к чередованию.

(?<!\S)((?:todo[ :]|(?:fixme|caveat|todoc|see|[?]{3}|!!!)(?!\S))).*

Частями, которые будут соответствовать

  • (?<!\S) Граница пробела слева
  • ( Группа захвата 1
    • (?: Группа без захвата
    • todo[ :] Соответствует todo, за которым следует пробел или :
    • | Или
    • (?:fixme|caveat|todoc|see|[?]{3}|!!!)(?!\S) Соответствует любому из вариантов, за которым следует граница пробела справа
    • ) Закрыть группу без захвата
  • ) Закрыть группу захвата
  • .* Соответствовать любому символу, кроме символа новой строки 0+ раз

Regex demo

1 голос
/ 04 мая 2020

Попробуйте (\b(todoc*|fixme|caveat|see)\b|\?\?\?|!!!).*

...