TL; DR:Линия разделения с экранированными разделителями в Python
line = "one|two|three\|four\|five"
fields = line.split(whatever)
для того, что значение whatever
делает:
fields == ['one', 'two', 'three\|four\|five']
У меня есть файл с разделителями символами труб. Некоторые из полей этого файла также включают в себя каналы, экранированные ведущей обратной косой чертой.
Например, одна строка данных в этом файле может иметь представление массива из ['one', 'two', 'three\|four\|five']
, и это будет представлено в файле, как one|two|three\|four\|five
У меня нет никакого контроля над файлом. Я не могу предварительно обработать файл. I имеют, чтобы сделать это в одном расколе.
Мне в конечном итоге нужно разделить каждую строку этого файла на отдельные поля, но эта обратная косая черта оказывается всевозможной проблемой. Сначала я попытался использовать негативный прогноз, но есть какая-то аркана, окружающая строки python и двойные экранированные символы, которые я не понимаю, и это мешает мне понять это.
Объяснение решения оценивается, но необязательно.
Напишите свой собственный парсер для учета escape-последовательностей, регулярное выражение в Python 're' не сможет его обработать. –
Вы можете уточнить, каков ваш окончательный ожидаемый результат? '['one', 'two', 'three \ | four \ | five']' или '['one', 'two', 'three', 'four', 'five']'?? – Sundeep
@spasic: первый. –