Замените каждый n-й экземпляр символа новой строкой в ​​Notepad ++

15995
Pieter van Niekerk

У меня есть строка NAME|VALUEпар с разделителями в виде трубы, которая выглядит примерно так ...

Name1|Value1|Name2|Value2|Name3|Value3 

То, что я хочу сделать, это заменить каждый второй экземпляр |новой строкой, чтобы у меня было что-то вроде этого ..

Name1|Value1 Name2|Value2 Name3|Value3 

Моя проблема не в новой строке, поскольку я знаю, что я могу использовать \r\nдля этого, а в части регулярных выражений, которая заменяет только каждый второй экземпляр |.

5

2 ответа на вопрос

9
Máté Juhász

Найти: ([^\|]*\|[^\|]*)\|
заменить на:\1\n

Это не работает DavidPostill 9 лет назад 1
Я пробовал это, но это просто добавляет новую строку без фактического разделения строки на `|` ' Pieter van Niekerk 9 лет назад 1
Я исправил и попробовал, у меня сейчас работает. Извините за предыдущую версию. Máté Juhász 9 лет назад 0
@nixda: у меня это работало и до твоего исправления, `|` не является специальным символом в этой ситуации, его не нужно экранировать Máté Juhász 9 лет назад 0
В моей версии Notepad (6.6.9) их нужно экранировать. Не знаю, что сказать. Это просто не работает без nixda 9 лет назад 0
Хорошо, я добавил `\` назад, спасибо за улучшение! (моя версия 5.9, намного старше вашей) Máté Juhász 9 лет назад 0
Они сильно изменились под капотом в своем сцинтилловом движке regex. Я считаю, что это было где-то около версии 6.3 nixda 9 лет назад 0
Это все еще не работает (по крайней мере, в Windows) http://imgur.com/rYcrcG9 DavidPostill 9 лет назад 0
это работает для меня (Windows 7, Notepad ++ 5.9), а также работает для Nixda. Просто странно Máté Juhász 9 лет назад 0
Если вы ищете, как это сделать в Sublime, вышеприведенное также работает, если вы включаете регулярное выражение в «Заменить ...» (это кнопка с «. *»). 8bitme 8 лет назад 0
3
DavidPostill

Я хочу заменить каждый второй экземпляр | с новой строкой

  • Меню «Поиск»> «Заменить» (или Ctrl+ H)

  • Установите «Найти что» (.*?\|.*?)[\|]

  • Установите «Заменить» на \1\r\n

  • Включить «Регулярное выражение»

  • Нажмите «Заменить все»

    enter image description here

До :

Name1|Value1|Name2|Value2|Name3|Value3 

После :

Name1|Value1 Name2|Value2 Name3|Value3 

Заметки:

  • Выше предполагает, что вы редактируете текстовый файл с EOL в Windows, \r\n.

  • Если вы используете файлы с разными EOL, вы можете преобразовать их в Windows EOL, используя меню «Правка»> «Преобразование EOL».

  • Если вы не работаете с Windows EOL и не хотите конвертировать их, используйте следующее:

    • Используйте \nвместо \r\nEOL для Unix / OS X

    • Используйте \rвместо \r\nMac OS (до версии 9) EOL


дальнейшее чтение

Предоставленное регулярное выражение довольно сомнительно: первое `. *?`, Как не жадное совпадение, никогда не будет сопоставлять что-либо, потому что слева от него ничего не останется для его привязки. Это фактически становится неоперативным. Bob 6 лет назад 0

Похожие вопросы