проблема re.sub при использовании группы с \ number - PullRequest
2 голосов
/ 23 июля 2010

Я пытаюсь использовать регулярное выражение для упорядочения текста, с re.sub.

Скажем, это почти CSV-файл, который я должен очистить, чтобы сделать его полностью CSV.

Я заменил все \ t на \ n, выполнив:

t = t.replace("\n", "\t")

... и все работает отлично. После этого мне нужно вернуть \ t к \ n для каждой из моих строк CSV. Я использую для этого это выражение:

t = re.sub("\t(\d*?);", "\n\1;", t, re.U)

Проблема в том, что это работает ... но частично. \ N добавляются правильно, но вместо моей подходящей группы за ними следует ^ A (согласно Vim)

Я попробовал свое регулярное выражение, используя re.findall, и оно работает нормально ... так что, по вашему мнению, может быть не так?

Мои строки CSV, наконец, должны выглядеть примерно так:

number;text;text;...;...;\n

Спасибо за вашу помощь!

Ответы [ 2 ]

4 голосов
/ 23 июля 2010

Ваш \1 интерпретируется как символ ascii 1. Попробуйте использовать \\1 или r"\n\1;".

0 голосов
/ 27 марта 2013

Как и Шаррон сказал, всегда всегда всегда используйте нотацию необработанных строк (r '') с регулярными выражениями. Возьми эту привычку, и тогда тебе не придется отлаживать странные проблемы, подобные этой.

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