Что было бы хорошим способом справиться с экранированными символами? - PullRequest
4 голосов
/ 12 февраля 2011

У меня есть строка в следующем формате;

s="part1,part2,part3,part4"

Я могу разбить строку на части, просто вызвав команду s.split(",").

Теперь вопрос в том, что еслиУ меня есть обратная косая черта в строке?Предполагая, что у меня есть следующая строка,

s="part1,part2,pa\\,rt3,part4"

Я хотел бы получить в результате ["part1","part2","pa,rt3","part4"].

Сначала я подумал о том, чтобы заменить \, нанесуществующей строки, затем разделите строку с помощью команды split и замените несуществующую строку запятой.

Можете ли вы придумать лучший способ решения этой проблемы?

Ответы [ 3 ]

11 голосов
/ 12 февраля 2011

Заменить ее несуществующей строкой - хороший вариант.

И в противном случае вы можете использовать регулярное выражение с отрицательным внешним видом, например:

re.split(r'(?<!\\),', 'part1,part2,pa\\,rt3,part4')
4 голосов
/ 12 февраля 2011

Модуль csv также может справиться с этим:

import csv
from io import StringIO

s = 'part1,part2,pa\\,rt3,part4'
f = StringIO(s)

r = csv.reader(f,quoting=csv.QUOTE_NONE,escapechar='\\')
for row in r:
    print row

Выход

['part1', 'part2', 'pa,rt3', 'part4']
0 голосов
/ 12 февраля 2011

Кстати, «\» - это , не является escape-символом для запятой ',' Таким образом, ваша строка будет иметь законное слово с '\'. Если вы специально хотите, чтобы \, было частью слова, то решения на основе регулярных выражений выглядят хорошо для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...