заменить строку через регулярное выражение, используя повышение переполнения стека

У меня есть строка, в которой появляются такие теги (таких тегов несколько)

|{{nts|-2605.2348}}

Я хочу использовать регулярное выражение для удаления |{{nts| а также }} и заменить всю строку, которую я набрал выше

-2605.2348

в оригинальной строке

Чтобы было понятнее:

Предположим, строка:

 number is |{{nts|-2605.2348}}

Я хочу строку как:

 number is -2605.2348

Я новичок в изучении регулярных выражений и прочтении многих вещей в Интернете, но не могу получить ответ на этот вопрос.

2

Решение

Это действительно зависит от того, насколько конкретно вы хотите быть. Вы хотите всегда удалить точно |{{nts|, или вы хотите удалить трубу, а затем {{с последующим любым количеством букв, за которыми следует труба? Или вы хотите удалить все, что не является пробелом между последним пробелом и первой частью числа?

Одним из многих способов сделать это было бы что-то вроде:

#include <iostream>
#include <boost/regex.hpp>

int main()
{
std::string str = "number is |{{nts|-2605.2348}}";
boost::regex re("\\|[^-\\d.]*(-?[\\d.]*)\\}\\}");
std::cout << regex_replace(str, re, "$1") << '\n';
}

онлайн демо: http://liveworkspace.org/code/2B290X

Однако, поскольку вы используете boost, рассмотрите гораздо более простые и быстрые парсеры, сгенерированные boost.spirit.

4

Другие решения

Других решений пока нет …