#python #python-3.x #regex
#python #python-3.x #регулярное выражение
Вопрос:
Идея состоит в том, чтобы удалить все, начиная с record {
закрытия }
каждой my_id_*
используемой в качестве переменной.
Я использую этот инструмент для проверки выражения: https://pythex.org /
У нас есть следующий файл:
record {
record {
id my_id_1
my_name_1
}
record {
id my_id_2
my_name_2
}
record {
id my_id_3
my_name_3
}
}
И мы хотим, чтобы вывод был таким:
Удаление my_id_3
record {
record {
id my_id_1
my_name_1
}
record {
id my_id_2
my_name_2
}
}
Мое фактическое регулярное выражение находит значения от my_id_*
первого до первого }
, но я не могу получить предыдущее record {
Фактическое регулярное выражение:
(my_id_3.*?})
Я попытался проиндексировать это во втором выражении регулярного выражения, чтобы получить правильную record {
запись, но ничего не получается:
Вторая попытка:
record {(?!=/s.*)
Комментарии:
1. Вы можете добавить
record {s
к своему коду поиска записей. Это будет соответствоватьrecord {
и любым конечным пробелам. Полное регулярноеrecord {s my_id_3(s w s ) }
выражение работает для меня.2. @Thymen Я допустил ошибку, перед идентификатором установлено слово, которое нарушает это регулярное выражение. ОБНОВЛЕН ФАЙЛ ПРИМЕРА
Ответ №1:
Это работает с параметром ‘dotall’, установленным на https://pythex.org
record {[^}{]*(my_id_3.*?})
Комментарии:
1. Этот не фиксирует
record {
, он выдает тот же результат соответствия, что(my_id_3.*?})
и я, допустил ошибку, перед идентификатором установлено слово, которое нарушает это регулярное выражение. ОБНОВЛЕН ФАЙЛ ПРИМЕРА2. похоже, что изменение захвата, перемещение круглых скобок решило проблему в этом:
(record {[^}{]*my_id_1.*?})
Ответ №2:
похоже, это работает после обновления содержимого файла.
(record {[^}{]*my_id_1.*?})
(record {[^}{]*my_id_2.*?})
(record {[^}{]*my_id_3.*?})
Ответ №3:
Вы можете использовать отрицаемый символьный класс [^
, исключающий сопоставление {
, и }
в начале, и в конце шаблона.
Обратите внимание, что вы можете опустить группу захвата ()
вокруг шаблона и что вам не нужно экранировать фигурные скобки внутри символьного класса.
brecord {[^{}]*my_id_1[^{}]*}
Демонстрация регулярных выражений
Если вы хотите удалить все 3 части сразу, вы можете использовать символьный класс [123]
, в котором перечислены все числа.
brecord {[^{}]*my_id_[123][^{}]*}
Ответ №4:
Вот так. пробел внутри []
(n[ ]*record {n[ ]*my_id_3.*?})
Комментарии:
1. Я допустил ошибку, перед идентификатором установлено слово, которое нарушает это регулярное выражение. ОБНОВЛЕН ФАЙЛ ПРИМЕРА
2. Пожалуйста, не предлагайте использовать регулярные выражения для анализа вложенного содержимого.