Evgeniy Miroshnichenko Asked:2020-08-18 01:51:28 +0000 UTC2020-08-18 01:51:28 +0000 UTC 2020-08-18 01:51:28 +0000 UTC 正则表达式 \W+ 在字符串中找不到字符“_” 772 根据C# 语言文档: \W- 匹配任何不是字母数字字符的字符。 对我来说,假设下划线字符“_”属于这个定义似乎是合乎逻辑的。 但在实践中,结果证明正则表达式 -@"\W+"在字符串中找不到下划线字符 - @"@$^&#№_\|/*-+=~%{}()[];:,.!?'"""` 你能解释一下为什么正则表达式找不到下划线字符-“_”吗? c# 2 个回答 Voted user285292 2020-08-18T02:13:30Z2020-08-18T02:13:30Z 因此,您需要记住,元字符的逆元\W是\w,它可以写成,[a-zA-Z0-9_]即在单词中使用的字符。 它通常包括所有字母、所有数字和下划线_,所以我们现在知道下划线在组\w中,而元字符\W包括除了元字符定义的字符之外的所有内容\w。 因此,在您的情况下,您可以将表达式写为@"[\W_]+"? Best Answer user177221 2020-08-18T03:42:13Z2020-08-18T03:42:13Z 所有字符\W都匹配,除了那些由 匹配的字符\w。 在 C# 中,\w 字母(不是A-Za-z,而是来自某些 Unicode 类别的所有字符,包括西里尔字母)、数字和来自标点、连接符类别的特殊字符属于. 该符号_包含在标点符号、连接符类别中(除此之外还有十几个符号,例如﹍和⁀)。 如果问题仅在于_- 将其显式添加到字符列表中:[\W_]+. 如果要捕获所有标点符号,连接器 - 添加整个类所有非字母和非数字 - 添加整个类:[\W\p{Pc}]+.
因此,您需要记住,元字符的逆元
\W是\w,它可以写成,[a-zA-Z0-9_]即在单词中使用的字符。它通常包括所有字母、所有数字和下划线
_,所以我们现在知道下划线在组\w中,而元字符\W包括除了元字符定义的字符之外的所有内容\w。因此,在您的情况下,您可以将表达式写为
@"[\W_]+"?所有字符
\W都匹配,除了那些由 匹配的字符\w。在 C# 中,
\w字母(不是A-Za-z,而是来自某些 Unicode 类别的所有字符,包括西里尔字母)、数字和来自标点、连接符类别的特殊字符属于.该符号
_包含在标点符号、连接符类别中(除此之外还有十几个符号,例如﹍和⁀)。如果问题仅在于
_- 将其显式添加到字符列表中:[\W_]+.如果要捕获所有标点符号,连接器 - 添加整个类所有非字母和非数字 - 添加整个类:
[\W\p{Pc}]+.