1

如何转换正则表达式 \w+ 给我 Unicode 中的整个单词——而不仅仅是 ASCII?

我使用.net

4

4 回答 4

1

在 .NET 中,\w将匹配作为 Unicode 字母或数字的 Unicode 字符。例如,它将匹配ìand Æ

要仅匹配 ASCII 字符,您可以使用[a-zA-Z0-9].

于 2009-11-25T12:27:29.780 回答
1

这对我来说按预期工作

        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()?

另一种可能的解释是,您期望收到的内容中有一个非单词字符,例如逗号。

于 2009-11-25T12:28:48.297 回答
0

你应该看看http://msdn.microsoft.com/en-us/library/yd1hzczs.aspx#ECMAScript
还有一个很好的 Cheat Sheet 用于在 .net 中使用正则表达式:http://regexlib.com/CheatSheet。 aspx

于 2009-11-25T12:27:16.877 回答
0

字母的“官方”Unicode 标识符是\p{L}, 数字\p{N}。因此,为了完整起见,在\w不扩展到 Unicode 字母/数字的情况下,等价\w+[\p{L}\p{N}\p{Pc}]+. 不要忘记下划线和其他“标点连接符”字符也包含在其中\w(因此您可以自行决定是否保留它们)。

于 2009-11-25T12:32:18.837 回答