使用RegEx在Embarcadero的C ++ Builder中将文本拆分为单个单词

时间:2016-08-30 10:14:18

标签: c++ regex string c++builder

我正在使用Embarcadero的C ++ Builder开发一个拼写检查器应用程序。我使用正则表达式将文本拆分为单个单词。以下代码适用于RAD Studio XE,但与RAD Studio Seattle的行为方式不同。

当单词包含非拉丁字符(如德语元音(Ä,Ö,Ü))或带有重音字符(é,ê,à)的字符时,会出现问题。 “\ w”被解释为[a-zA-Z_0-9]忽略非拉丁字符。

首先,在我的背景下,一个词是什么? 可能的词包括:

  • “\ r \ n” 个

  • “word-word-word-word ...”

  • “字”。或“word - ”

  • 带有叛逆者的词语:“'word”“wor'd”“word”“

  • “字”

  • 有两种不同类型的撇号:'和'

以下是代码:

String text (L"Österreich l'année);
const String sRegex (L"\r\n|(\\w+\\-)+\\w+|\\w+(\\.|\\-)|('|’)?\\w+('|’)?\\w*");
TRegEx regex(sRegex, TRegExOptions());
TMatchCollection regexMatches = regex.Matches(text);
for (int i=0; i<regexMatches.Count; ++i)
{
    TMatch regexMatch = regexMatches.Item[i];
    String word (regexMatch.Value);

    //do stuff with word
}

String字的所需值是“Österreich”和“l'année”。然而,RegEx匹配的是“sterreich”,“l'ann”和“e”。

我的问题是,如何指定所有非拉丁字符?

1 个答案:

答案 0 :(得分:1)

\p{L}匹配 unicode字母。尝试使用它而不是\w

See it here at regex101

如果您还想要数字(与\w一样),请将\d添加到论坛。