2015-02-04 5 views
0

Я работающий под регулярное выражение Vim: /^ \{-}\a.*$\nконвертировать ВИМ регулярное выражение питона для re.sub

Я осуществить глобальный поиск и замена в :%s/^ \{-}\a.*$\n// Это прекрасно работает - удаляет все строки, которые начинаются с любым количеством пробелов (согласовано без жадности), за которым следует буква и все остальное до конца строки, включая новую строку.

Я не могу (чтобы спасти свою душу) выяснить аналогичное регулярное выражение в Python. Вот что имеет смысл для меня:

x = re.sub("^ *?\a.$\n","",y) 

Но это ничего не значит.

Большое спасибо за ваши проворные ответы.

ответ

2

\a означает колокол символ (0x07) в Python, и $\n является излишней плохой идеей, так:

x = re.sub(r"^ *[A-Za-z].*\n","",y) 

Кроме того, нет никаких причин, чтобы написать ' *?' вместо ' *' здесь, как это всегда будет за ним следует не-пробел, если он соответствует.

2

Если вы хотите совместить любое количество пробелов, вы также можете использовать последовательность \s.

Любая буква будет соответствовать классу символов [a-zA-Z]. Вам также не нужно использовать $ и \n, либо вы сделаете это.

Предложите следующее:

x = re.sub(r"^\s*[a-zA-Z].*(\r|\n)","",y) 

Если вы хотите, по крайней мере один пробел, использовать \s+ вместо \s*

Смежные вопросы