Я пытаюсь разработать регулярное выражение, которое будет соответствовать всем в инструкции python if
и тому подобное. До сих пор у меня начальное совпадение как ':[\n][\t]'
, но я не могу вычислить регулярное выражение, чтобы обнаружить закрытие оператора if
в python. Пока лучшее, что я мог придумать, это [\n][^\t]
, потому что я знаю, что блок выходит, когда новая строка не следует за вкладкой.Regex Matching Everything Within Python If Statement
ответ
Это должно быть сделано с ast, и я не вижу смысла использовать регулярное выражение для соответствия выражению if.
Я, конечно, не рекомендую использовать regex здесь. Однако это можно сделать с помощью регулярного выражения. Идея состоит в том, чтобы захватить пробелы, используемые для отступов объявления if, и использовать обратную ссылку \1
, чтобы потребовать такой же отступ и, по меньшей мере, еще одно место в следующих строках.
Следующее regex - пример, который будет охватывать самые простые утверждения. Например, он будет терпеть неудачу с многострочными тройными кавычками. Вы можете работать его здесь:
pattern = re.compile(r'''
#if statement (group 1 captures the indentation)
^([ \t]*) if\b .* $
#code
(?:
#comments with any indentation
(?:
\s*?
\n [ \t]* [#].*
)*
#Optional elif/else lines
(?:
\s*?
\n\1 el(?:se|if)\b .* $
)?
#following lines with more indentation
\s*?
\n\1 [ \t] .*
)*
\n? #last newline char
''', re.MULTILINE | re.VERBOSE)
Примечание: Это выражение также может быть использован, чтобы соответствовать любое заявление. Например, чтобы совпадать с циклами, просто замените if
на while
и удалите подвыражение elif
. demo
- 1. BASH regex matching in if statement
- 2. Matlab regex if statement
- 3. Regex with if statement
- 4. Regex if statement problems
- 5. Regex inside If statement
- 6. ruby regex if-statement
- 7. Bash regex if statement
- 8. if statement in python regex substitution
- 9. Python Regex Matching
- 10. Redundant If Statement и Regex
- 11. Regex Matching - Python
- 12. Regex matching Python
- 13. Matching Regex в Python
- 14. Python Regex Zipcode Matching
- 15. Python RegEx Matching Newline
- 16. Python Regex Matching Apostrophes
- 17. python regex pattern matching
- 18. Regex Everything With Whitespace
- 19. jQuery Hide/Show Within If/Else Statement Не работает
- 20. Regex ÅÄÖ in if-statement
- 21. Regex Replace Within Замена
- 22. Regex Match Within Range
- 23. Regex Tag-Within-Tag
- 24. python if elif else statement
- 25. Python if statement efficiency
- 26. If-statement в Python
- 27. Python if statement
- 28. Compromising Python if statement
- 29. python dict. if statement
- 30. python if statement always
Вы считали использование 'ast' вместо этого? – roippi
На самом деле, блок выходит, когда отступы опускаются. Вкладки не требуются. –
Это сложно в общем случае. Рассмотрите комментарии (которые могут быть на границе LH), и здесь документы как две трудности среди многих. Как состояния roippi - используйте 'ast' – dawg