Используйте регулярное выражение, чтобы прикрепить '.' для каждого последовательного заглавного символа - PullRequest
0 голосов
/ 25 января 2019

I Foo bar DNA

Я хочу заменить DNA на D.N.A (D.N.A. также в порядке), но не заменить 'I' и 'Foo'.

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

string s = "I Foo bar DNA";
cout << std::regex_replace(s, std::regex("([A-Z]){2,}"), "$1.") << endl;
//output: I Foo bar A.

или

cout << std::regex_replace(s, std::regex("([A-Z])[A-Z]"), "$1.") << endl;
//output: I Foo bar D.A

1 Ответ

0 голосов
/ 25 января 2019

Вы можете использовать

([A-Z])(?=[A-Z])

Заменить на $1..

См. Демонстрацию regex

Здесь,

  • ([A-Z]) - сопоставляет и фиксирует в Группе 1 любую заглавную букву ASCII
  • (?=[A-Z]) - предзаказ обеспечивает наличие заглавной буквы ASCII после предыдущей, но сохраняет сопоставленный символ внеобщее значение совпадения.

C ++ demo :

std::string s("I Foo bar DNA");
std::regex reg("([A-Z])(?=[A-Z])");
std::cout << std::regex_replace(s, reg, "$1.") << std::endl;
// => I Foo bar D.N.A
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...