разъяснение по сопоставлению с образцом vim - PullRequest
0 голосов
/ 01 июня 2011

Я хочу преобразовать отступ 5 пробелов в файле Python в отступ 4 пробелов. Я хочу, чтобы команда сделала следующее

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

Я ввел команду % s / ^ \ [a-zA-Z] * // , которая, кажется, работает. Позже я понял, что команда на самом деле должна быть

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

Однако я все еще не могу понять, как работает команда (см. Выше). Он должен в основном сообщать об ошибке для следующего шаблона, который не найден, но все равно работает.

class H:
     def __init__():
         hell()

1 Ответ

2 голосов
/ 01 июня 2011

Это работает, потому что * означает «соответствовать нулю или более предыдущего атома».В вашем случае это соответствует нулю.Вы, вероятно, хотели бы использовать \+ вместо этого, что означает «соответствовать одному или нескольким предыдущим атомам».

В действительности, вы могли бы просто отбросить * полностью, потому что только пробел, за которым следует один символсоответствовал бы тому, что вы первоначально искали.Есть лучшие регулярные выражения для того, что вы пытаетесь выполнить, но это не то, что вы спрашиваете здесь.

Редактировать (уточнение):

Ваше регулярное выражение в его нынешнем виде (^\ [a-zA-Z]*) переводится как:

  • ^: с начала строки
  • \: соответствует пробелу
  • [a-zA-Z]: сопровождается буквой
  • *: ноль или более раз (предыдущего атома - буква)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...