如何转换正则表达式 \w+ 给我 Unicode 中的整个单词——而不仅仅是 ASCII?
我使用.net
在 .NET 中,\w
将匹配作为 Unicode 字母或数字的 Unicode 字符。例如,它将匹配ì
and Æ
。
要仅匹配 ASCII 字符,您可以使用[a-zA-Z0-9]
.
这对我来说按预期工作
string foo = "Hola, la niña está gritando en alemán: Maüschen raus!";
Regex r = new Regex(@"\w+");
MatchCollection mc = r.Matches(foo);
foreach (Match ma in mc)
{
Console.WriteLine(ma.Value);
}
它输出
你好 拉 尼娜 埃斯塔 格里坦多 zh 阿莱曼 莫申 劳斯
您是否使用 .Match() 而不是 .Matches()?
另一种可能的解释是,您期望收到的内容中有一个非单词字符,例如逗号。
你应该看看http://msdn.microsoft.com/en-us/library/yd1hzczs.aspx#ECMAScript
还有一个很好的 Cheat Sheet 用于在 .net 中使用正则表达式:http://regexlib.com/CheatSheet。 aspx
字母的“官方”Unicode 标识符是\p{L}
, 数字\p{N}
。因此,为了完整起见,在\w
不扩展到 Unicode 字母/数字的情况下,等价\w+
于[\p{L}\p{N}\p{Pc}]+
. 不要忘记下划线和其他“标点连接符”字符也包含在其中\w
(因此您可以自行决定是否保留它们)。