Разбор строки с некоторыми определенными ключевыми словами для разделения (вне строковых литералов), но не для разделения внутри строковых литералов в Python
Могу ли я задать вопрос о проблеме, с которой я столкнулся в эти дни? Я был бы очень признателен, если бы вы, ребята, захотели помочь мне решить эту проблему 🙂
Итак, у меня есть эта простая строка, которую я хочу разобрать, используя ключевое слово ‘@’ (анализировать это только в том случае, если ‘@’ находится за пределами строка внутри строки). Причина этого в том, что я пытаюсь научиться анализировать некоторые строки на основе определенных ключевых слов для анализа/разделения, потому что я пытаюсь реализовать свой собственный «простой язык программирования»… 9″]*»\B)’, коды[x].split(‘println(‘)[-1].removesuffix(‘)\n’ или ‘)’)) переменные: список[str] = [] результат_для_тестирования: список[str] = [] для аргумента в диапазоне (0, len (print_args)): # Я не знаю, работает ли это, потому что строка разбивается на каждый пробел, но # если внутри строки есть пробелы, это будет считаться пробелами # это должно было быть разделено, но не должно быть разделено, потому что # потому что этот пробел находится внутри строки, которая находится внутри строки, а не снаружи # строка внутри строки.
После таких операций вывод, который я получаю для анализа основных вещей без лишних пробелов, выглядит следующим образом:
string_to_be_parsed: str = '"Значение a: " @ a @ "String"' Output > ['"Value of a is: "', 'a', '"String"'] # Как я и ожидал...
Но почему-то ломается, когда что-то вроде этого (с ненужными пробелами):
string_to_be_parsed: str = '" Значение a: "@a @" String "' Вывод > ['" Значение a: " @ a @ " String "'] # Неправильный результат, и я надеюсь, что результат будет таким: Ожидаемый результат > [" Значение a: ", a, "String"] # Если внутри строки есть пробелы, то это нужно просто игнорировать, но я не знаю, как это сделать
Хорошо, ребята, это проблемы, с которыми я столкнулся, и вывод:
- Как разобрать строку и разделить каждую строку внутри строки по ключевому слову ‘@’, но она не будет разделена, если ‘ @’ находится внутри строки в строке?
Пример: '"@ в строке внутри строки" @ is_out_from_a_string' Результат должен быть: ['"@ в строке внутри строки"', is_out_from_a_string]
- Как при синтаксическом анализе строк игнорировать все пробелы внутри строки в строке?
Пример: '"здесь тоже лишние пробелы" @x@y@z "это тоже"' В результате должно получиться: ['"здесь тоже лишние пробелы"', x, y, z, '"и этот тоже"']
Еще раз, я был бы очень признателен за вашу тяжелую работу, чтобы помочь мне найти решения для моих проблем, и если есть что-то, что я сделал неправильно или неправильное представление, пожалуйста, скажите мне, где и как я должен это исправить 🙂
Спасибо you 🙂
parsing — Удаление строковых литералов, которые на самом деле являются комментариями из исходного кода Python?
Мне нужно быстро написать (или позаимствовать) что-нибудь на любом языке, которое автоматически фильтрует тонны исходного кода Python, чтобы удалить комментарии. Цель состоит в том, чтобы сделать код на целевой платформе более компактным (и, кроме того, реверс-инжиниринг даже немного сложнее). Я определенно не должен изменять поведение кода и могу жить с несколькими оставшимися комментариями. Мой ввод и вывод должен быть текстовым файлом .py
, который, как предполагается, является действительным python 2.x (предположим: ограничен ASCII, я позабочусь о UTF8).
Строго говоря, мне , а не нужно удалять комментарии вида, определенного
Комментарий начинается с символа решетки (
#
), который не является частью строковый литерал и заканчивается в конце физической строки.
, потому что токенизатор python уже делает это за меня, и в итоге код распространяется как .pyc
. Жаль, потому что я ясно вижу, как правильно сделать и (единственная немного сложная часть — это запутанный синтаксис строкового литерала в python).
Моя проблема в том, что беглый взгляд на исходный код Python, который мне нужно отфильтровать, показывает, что он содержит множество комментариев, которые являются не введенными #
, а просто строковыми литералами, которые не выполняют никакой полезной задачи. Они определенно хранятся в токенизированном файле .pyc
. Мне сказали, что они повсюду, чтобы облегчить автоматическое создание документации и ее редактирование. Многие из этих строковых литералов, которые на самом деле являются комментариями, встроены в определения функций, например:
по определению OnForceStatusChoice (я, событие): """Действие при выборе статуса""" self.ExecutionPanel.SetFocus()
С другой стороны, существует множество строковых литералов, представляющих собой полезный текст, в том числе текст на английском языке, отображаемый пользователю, и инициализация таблиц. Это делает безнадежным автоматическое и безопасное распознавание тех строковых литералов, которые на самом деле являются комментариями по значению строкового литерала.
Судя по моей выборке, большинство строковых литералов, которые на самом деле являются комментариями, вводятся с помощью """
(за некоторыми исключениями, с которыми я, возможно, мог бы смириться), но я достаточно разбираюсь в python, чтобы знать, что я не могу безопасно удалить все эти строковые литералы.