Как использовать регулярные выражения для работы с китайскими символами пунктуации в Stack Overflow

Я хочу добиться такого результата:

До:

有人 可能 会 问: «那 情绪, 欲望, 冲动, 强迫 症 有 什么 区别 呢»

После:

有人 可能 会 问 那 情绪 欲望 冲动 强迫 症 有 什么 区别 呢

Для пробела замените китайские знаки препинания.

Я пытался использовать replace а также replace_if функционировать, но не удалось. Код как это:

char myints[] = "有人可能会问:“那情绪、欲望、冲动、强迫症有什么区别呢?”";
std::vector<char> myvector ;
std::replace_if (myvector.begin(), myvector.end(), "\\pP", " ");
std::cout << "myvector contains:";
for (std::vector<char>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';

1

Решение

Предполагая, что вы имели в виду использование регулярного выражения, а не символьной функции замены … Вот что я имел в виду, используя std::regex_replace, Возможно, есть более элегантное регулярное выражение, которое обобщается с меньшим количеством сюрпризов, но по крайней мере это работает для вашего примера.

#include <regex>
#include <string>

int main()
{
std::wstring s(L"有人可能会问:“那情绪、欲望、冲动、强迫症有什么区别呢?”");

// Replace each run of punctuation with a space; use ECMAScript grammar
s = std::regex_replace(s, std::wregex(L"[[:punct:]]+"), L" ");

// Remove extra space at ends of line
s = std::regex_replace(s, std::wregex(L"^ | $"), L"");

return (s != L"有人可能会问 那情绪 欲望 冲动 强迫症有什么区别呢"); // returns 0
}
1

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


По вопросам рекламы [email protected]