Поскольку сокращения, которые вы хотите рассматривать как отдельные слова, обычно представляют собой одну букву + апостроф на французском языке (например, l'huile
, n'en
, d'accord
), вы можете использовать шаблон, который соответствует 1+ пробелам. или место, которому непосредственно предшествует начало слова, затем 1 буква, а затем апостроф.
Я также предлагаю учесть фигурные апострофы. Итак, используйте
\s+|(?<=\b\p{L}['’])\b
См. Демонстрационную версию regex .
Подробности
\s+
- 1+ пробелов |
- или (?<=\b\p{L}['’])\b
- положение границы слова (\b
), которому предшествуют начало слова (\b
), буква (\p{L}
) и '
или ’
.
In Qt, вы можете использовать
QStringList result = text.split(
QRegularExpression(R"(\s+|(?<=\b\p{L}['’])\b)",
QRegularExpression::PatternOption::UseUnicodePropertiesOption)
);
R"(...)"
- это необработанная строковая литеральная нотация, вы можете использовать "\\s+|(?<=\\b\\p{L}['’])\\b"
, если вы используете среду C ++, которая не допускает необработанные строковые литералы.