.net regex: Qual é a palavra personagem w?
pergunta simples:
Qual é o padrão para o personagem da palavra \w
em c#, .net?
o meu primeiro pensamento foi que corresponde [A-Za-z0-9_]
e a documentação diz-me:
Character class Description Pattern Matches \w Matches any \w "I", "D", "A", "1", "3" word character. in "ID A1.3"O que não ajuda muito.
E
\w
parece corresponder äöü
, também. Que mais? Existe uma definição melhor (exata) disponível?
3 answers
Pc
(Pontuação, Conector)
- esta categoria inclui dez caracteres, dos quais o mais utilizado é o carácter de linha baixa ( _ ), u+005F.
Se for especificado um comportamento conforme com o ECMAScript, \w
é equivalente a [a-zA-Z_0-9]
.
Ver também
Basicamente corresponde a tudo o que pode ser considerado a definição intuitiva de letra em vários scripts – mais o underscore e algumas outras oddballs.
Poderá encontrar uma lista completa (pelo menos para o BMP) com o seguinte pequeno excerto de PowerShell:
0..65535 | ?{([char]$_) -match '\w'} | %{ "$_`: " + [char]$_ }
Assim, após algumas pesquisas usando '\w ' em. NET é equivalente a:
public static class Extensions {
/// <summary>
/// The word categories.
/// </summary>
[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,
});
/// <summary>
/// Determines whether the specified character is a word character (equivalent to '\w').
/// </summary>
/// <param name="c">The c.</param>
public static bool IsWord(this char c) => _wordCategories.Contains(char.GetUnicodeCategory(c));
}
Escrevi isto como um método de extensão para ser fácil de usar em qualquer carácter {[1] } Basta invocar c.IsWord()
que irá retornar true
Se o carácter for um carácter de palavra. Isto deve ser significativamente mais rápido do que a utilização de um Regex.
No total, isto corresponde 49.760 dos 65.535 caracteres, de modo que o simples "regex" é frequentemente mostrado na web estão incompletos.