.Net正则expression式:什么是字符\ w?

简单的问题:
c# \w net中字符\w的模式是什么?

我首先想到的是它匹配[A-Za-z0-9_] , 文档告诉我:

 字符类描述模式匹配
 \ w匹配\ w“我”,“D”,“A”,“1”,“3”
                   单词字符。 在“ID A1.3”

这不是很有帮助。
而且\w似乎与äöü相匹配。 还有什么? 有更好的(确切的)定义吗?

3 Solutions collect form web for “.Net正则expression式:什么是字符\ w?”

从文档 :

字符:\ w

\w匹配任何单词字符。 单词字符是下表中列出的任何Unicode类别的成员。

  • Ll (Letter,小写)
  • Lu (字母,大写)
  • Lt (Letter,Titlecase)
  • Lo (Letter,Other)
  • Lm (Letter,Modifier)
  • Nd (数字,十进制数字)
  • Pc (标点,连接器)
    • 这个类别包含10个字符,其中最常用的是LOWLINE字符(_),u + 005F。

如果指定了符合ECMAScript的行为,则\w等同于[a-zA-Z_0-9]

也可以看看

  • Unicode字符数据库
  • “标点,连接器”类别中的Unicode字符

基本上它匹配所有可以被认为是字母在各种脚本中的直觉定义的东西 – 加上下划线和其他一些古怪的东西。

您可以使用以下小小的PowerShell代码片段find一个完整列表(至less对于BMP):

 0..65535 | ?{([char]$_) -match '\w'} | %{ "$_`: " + [char]$_ } 

因此,在.NET中使用'\ w'进行一些研究后,相当于:

 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)); } 

我已经写了这个扩展方法,很容易使用任何字符c只是调用c.IsWord()如果字符是一个单词字符将返回true 。 这应该比使用正则expression式快得多。

有趣的是,这看起来不符合.NET规范,实际上'\ w'匹配938'NonSpacingMark'字符,这是没有提及的。

总共有65535个字符中的49,760个匹配,所以web上经常显示的简单正则expression式是不完整的。

  • 正则expression式来匹配一个数字两到四次
  • 使用Python的string.replace与re.sub
  • 在Javascript中计算正则expression式的匹配数
  • 是否有JavaScript的String.indexOf()允许正则expression式的版本?
  • 如何从一个string中提取数字并获取一个int数组?
  • 我如何删除特殊字符?
  • 为什么说(j ++); 禁止?
  • 从ifconfig的输出中提取MAC地址的最佳方法是什么?
  • 如何使用Regex.Replace从string中删除数字?
  • 如何检查一个string是否完全匹配Scala中的正则expression式?
  • 任何大于0的数的正则expression式?