Я хотел бы удалить определенные строки (предположим «aaa» и «bbb») из многострочной строки со стандартной библиотекой регулярных выражений C++. С заменой синтаксиса ECMAScript я бы использовал следующий шаблон: /^(aaa|bbb)$/gm
. Я пытался передать что-то вроде как аргумент regex в std::regex_replace
, но он не работает, поскольку ^
и $
, похоже, не совпадают как начало и конец строки, хотя я не прошел match_not_eol
или match_not_bol
в качестве совпадений. Итак, как должен выглядеть шаблон C++ для этого случая?C++ regex: заменить шаблон в нескольких строках
ответ
Ссылка regex_replace
не указана для обозначения флага для переопределения значений ^
и $
. Таким образом, когда вам нужно искать и заменять линиями, используйте группу захвата (^|\r?\n)
до и посмотреть (?=\r?\n|$)
после основного рисунка (и заменить на backreference $1
). Разумеется, шаблоны можно настроить, чтобы разрешить или не пустые строки после замены.
См IDEONE demo:
std::string s("ccc\r\naaa\r\ngggg");
std::regex ee(R"((^|\r?\n)(?:aaa|bbb)(?=\r?\n|$))");
std::string newtext = std::regex_replace(s, ee, "$1");
std::cout << newtext << std::endl;
Выход:
ccc
gggg
Спасибо за ответ. Я на самом деле попробовал что-то вроде соответствия «(^ | \ n)» в начале и «($ | \ n)» в конце шаблона, но кажется, что он не соответствует строке в случае, если предыдущая строка был заменен, вероятно, потому, что начало «(^ | \ n)» является частью предыдущего совпадения. Если вы замените шаблон на R "((^ | \ r? \ N) (?: ccc | aaa | bbb) (\ r? \ N | $))" в вашем примере вы можете видеть, о чем я говорю , – tonso
В этом случае поверните конечную группу захвата в обратную сторону. Используйте 'std :: regex ee (R" ((^ | \ r? \ N) (?: aaa | bbb) (? = \ R? \ N | $)) ");' и заменим одним обратным адресом '$ 1 '. –
Если я использую '(? = \ R? \ N | $)', это приводит к segfault, потому что '' 'включен в lookahead, я думаю, но если я использую' ((? = \ R? \ N) | $) 'все в порядке. Спасибо за помощь – tonso
- 1. C# Regex заменить шаблон кронштейна
- 2. Заменить «" на шаблон «_» Regex? C#
- 3. заменить строки в нескольких строках
- 4. Регулярное выражение в Java, чтобы заменить шаблон в нескольких строках
- 5. Notepad ++ RegEx заменить шаблон
- 6. Regex заменить шаблон
- 7. Regex Найти и заменить в строках
- 8. JavaScript Regex отформатирована на нескольких строках
- 9. C# Regex Заменить шаблон (заменить строку) Возврат $ 1
- 10. Regex: Заменить один шаблон другим
- 11. Regex заменить в нескольких файлах
- 12. RegEx заменить неправильные символы C#
- 13. Заменить {х} лексемы в строках
- 14. Java Regex заменить шаблон в определенной строке
- 15. Python Regex: соответствие символа на нескольких строках?
- 16. SQL - Как заменить/изменить строки в нескольких строках?
- 17. Заменить строку, используя шаблон замены Regex
- 18. Regex шаблон выпуск C#
- 19. C# Regex заменить url
- 20. C# Regex заменить Вопрос
- 21. Заменить шаблон в C++ 98
- 22. C# Regex Match Точного слово в строках
- 23. C# Regex заменить помощь
- 24. C# Regex заменить на вставку
- 25. Regex заменить определенные слова в C#
- 26. Haskell Regex заменить: шаблон содержит обратный слэш
- 27. Dynamic Regex найти и заменить шаблон
- 28. Ant Regex Заменить шаблон с содержимым файла
- 29. Заменить знак $ в строках
- 30. Заменить строку в строках
Можете ли вы отправить что-то, что можно скопировать и вставить в онлайн-компилятор? – Mikhail
Если вы задумываетесь о том, как вы думаете, почему вы думаете, что «этот вопрос не показывает никаких исследований, он неясен или не полезен». Спасибо – tonso
Я не спустил ... – Mikhail