Как я могу заменить в Visual Studio Code каждую новую строку в документе, но не каждые две строки (или более)? - PullRequest
2 голосов
/ 27 марта 2019

Я загружал файлы через FTP, и после каждой строки добавлялись новые строки.Теперь в моем коде добавлены пустые строки для контекста.После загрузки каждая пустая строка, которую я добавил, теперь состоит из трех пустых строк.

Таким образом, если я удаляю все пустые строки с выражением регулярного выражения, подобным этому ^\n, то удаляются также те строки, которые я добавил для контекста.И это ^\n{1} тоже не помогает.

Это пример HTML, который у меня сейчас есть после загрузки через FTP:

<nav>

  <ul>

    <li><a href="#">London</a></li>

    <li><a href="#">Paris</a></li>

    <li><a href="#">Tokyo</a></li>

  </ul>

</nav>



<div>new context</div>



<div>new context</div>

Это то, что я хотел бы, чтобывыглядят так:

<nav>
  <ul>
    <li><a href="#">London</a></li>
    <li><a href="#">Paris</a></li>
    <li><a href="#">Tokyo</a></li>
  </ul>
</nav>



<div>new context</div>



<div>new context</div>

По сути, мне нужно выражение регулярного выражения, которое бы находило все пустые строки, которые не находятся после или перед другой пустой строкой.

Ответы [ 5 ]

3 голосов
/ 27 марта 2019

Это работает, чтобы найти одну пустую строку

Найти: (\S[^\S\n]*\n)[^\S\n]*\n(?![^\S\n]*\n)
Заменить: $1

https://regex101.com/r/7IbV1Y/1

Объяснено

 ( \S [^\S\n]* \n )            # (1) A line with a piece of non-wsp text 
 [^\S\n]* \n                   # Single blank line with a line break
 (?! [^\S\n]* \n )             # Not a blank line with a line break ahead
1 голос
/ 27 марта 2019

В vscode при нажатии Ctrl + F включить регулярное выражение и вставить в поле Найти следующее:

>\n\n(?!\n)

и

>\n

в Заменить поле. Теперь выберите Заменить все .

Это приведет к результату, который вы описали в своем первоначальном вопросе. Я проверил это с vscode 1.32.3

1 голос
/ 27 марта 2019

Попробуйте что-то вроде этого:

(?<!\n)\n(?!\n$)

с параметрами g и m и заменой на пустую строку.

Рабочий пример см. https://regex101.com/r/uEpQ0L/1

1 голос
/ 27 марта 2019

EDIT:

После просмотра Valdi_Bo 's answer это казалось очень хорошим решением. Единственная проблема заключается в том, что он не работает должным образом в VS Code. Таким образом, чтобы он работал в VS Code, необходимо обновить его до версии 1.32 и изменить регулярное выражение на:

(?<!^\n)^\n(?!\n$)

и тогда я получил желаемый результат, как показано здесь: https://regex101.com/r/b3Jnk2/1

Предыдущий ответ:

Это регулярное выражение сделало это для меня.

^(\n)(?!\n{2}) Вот результат, который я получил:

<nav>
    <ul>
        <li><a href="#">London</a></li>
        <li><a href="#">Paris</a></li>
        <li><a href="#">Tokyo</a></li>
    </ul>
</nav>

<div>new context</div>

<div>new context</div>

После того, как вы это сделаете, и у вас все еще есть пара пустых строк, от которых вы хотите избавиться, но не те пустые строки, которые были добавлены для контекста, используйте это регулярное выражение: ^(\n{2})

1 голос
/ 27 марта 2019

То, что вы можете сделать, это сопоставить одну строку, в которой присутствует хотя бы непробельный символ. Затем сопоставьте следующую пустую строку с новой строкой. Это также будет учитываться, если пустые строки содержат сами пробелы.

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

Заменить эти совпадения на первую группу захвата $1

^([ \t]*\S.*\n)[ \t]*$\n(?=[ \t]*\S)

Это будет соответствовать

  • ^ Начало строки
  • ( Группа захвата
    • [ \t]*\S.*\n Совпадение 0+ раз пробел или табуляция, затем непробельный символ с последующим сопоставлением до конца строки и новой строки
  • ) Закрыть группу
  • [ \t]*$\n Соответствует пустой строке или только пробелам или символам табуляции
  • (?= Позитивный взгляд, утверждайте, что следует
    • [ \t]*\S) Соответствует 0+ раз пробелу или табуляции, за которыми следует символ без пробела
  • ) Закрыть взгляд

Regex demo

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