Nach einigen Recherchen entspricht die Verwendung von '\ w' in .NET also:
public static class Extensions {
[NotNull]
private static readonly HashSet<UnicodeCategory> _wordCategories = new HashCollection<UnicodeCategory>(
new[]
{
UnicodeCategory.DecimalDigitNumber,
UnicodeCategory.UppercaseLetter,
UnicodeCategory.ConnectorPunctuation,
UnicodeCategory.LowercaseLetter,
UnicodeCategory.OtherLetter,
UnicodeCategory.TitlecaseLetter,
UnicodeCategory.ModifierLetter,
UnicodeCategory.NonSpacingMark,
});
public static bool IsWord(this char c) => _wordCategories.Contains(char.GetUnicodeCategory(c));
}
Ich habe dies als Erweiterungsmethode geschrieben, um es einfach für jedes c
gerade aufgerufene Zeichen zu verwenden , c.IsWord()
das zurückgegeben wird, true
wenn das Zeichen ein Wortzeichen ist. Dies sollte erheblich schneller sein als die Verwendung eines Regex.
Interessanterweise scheint dies nicht mit der .NET-Spezifikation übereinzustimmen. Tatsächlich entspricht '\ w' 938 'NonSpacingMark'-Zeichen, die nicht erwähnt werden.
Insgesamt entspricht dies 49.760 der 65.535 Zeichen, sodass die im Web häufig angezeigten einfachen regulären Ausdrücke unvollständig sind.
\w+
dies verwenden würde, würde dies möglicherweise zu jedem Wort passen, egal wie verrückt es ist, solange der Inhalt entweder aus Klein-, Großbuchstaben, Zahlen 1-9 und einigen (10) Sonderzeichen (wie dem _underscore) besteht. Und wäre eine Abkürzung für das Schreiben von so etwas wie[a-zA-Z1-9_]+