Я хочу найти все экземпляры в моем коде python, в которых используется оператор деления /. Мой первый инстинкт - использовать регулярное выражение. Выражение должно отфильтровывать использование / без разделения, то есть имена путей. Лучшее, что я придумал, - это [ A-z0-9_\)]/[ A-z0-9_\(]. Это найдет оператор деления в
foo/bar
foo / bar
foo/(bar*baz)
foo / 10
1/2
etc...
но также соответствовал бы /s в чем-то вроде "path/to/my/file"
Может ли кто-нибудь придумать лучшее регулярное выражение? В качестве альтернативы, есть ли способ найти разделение без регулярного выражения?
изменить: чтобы уточнить:
Для этого мне не обязательно использовать python. Я просто хочу знать, где находятся операторы подразделения, чтобы я мог вручную / визуально их проверять. Я могу игнорировать закомментированный код
Не используйте для этого регулярные выражения. Вам нужен правильный синтаксический анализ кода. Посмотрите на модуль astroid. Он найдет для вас все узлы AST с операторами деления.
Чтобы усложнить ситуацию: в строке разделения (или любой отдельной строке Python, на самом деле) могут быть символы новой строки. А как насчет целочисленного деления //?
Было бы хорошо, если бы вы могли описать, что вы хотите делать с экземплярами использования оператора деления. Хотите их визуально осмотреть? Преобразовать их? и Т. Д.
вы можете запустить свой код на python 2 в режиме -3, чтобы быть предупрежденным об этих случаях разделения
А как насчет символов деления в комментариях или в закомментированном коде? Кроме того, для чего вам это нужно? Возможно, есть лучший способ добиться этого.
Кроме того, вы хотите сделать это в Python или просто с помощью Regex, например в вашем редакторе кода?






Вы можете проанализировать свой код Python в абстрактное синтаксическое дерево с помощью модуля аст, а затем пройти по дереву, чтобы найти номера строк, в которых появляются выражения деления.
example = """c = 50
b = 100
a = c / b
print(a)
print(a * 50)
print(a / 2)
print("hello")"""
import ast
tree = ast.parse(example)
last_lineno = None
for node in ast.walk(tree):
# Not all nodes in the AST have line numbers, remember latest one
if hasattr(node, "lineno"):
last_lineno = node.lineno
# If this is a division expression, then show the latest line number
if isinstance(node, ast.Div):
print(last_lineno)
И ast.FloorDiv для //.
Извините, чтобы уточнить, вы хотите сказать, что используете Python для чтения текстового файла, содержащего код Python?