如何使用.net匹配Unicode字符

本文关键字:Unicode 字符 匹配 net 何使用 | 更新日期: 2023-09-27 17:49:28

我想使用正则表达式匹配Unicode字符。我发现这是可能的使用Unicode类别或块,或者更准确地使用这些Unicode类别和支持的命名块。

问题是我无法使用LINQPAD 4Regex.IsMatch功能使其工作。例如,尝试匹配像这样的简单拉丁字符:

Console.WriteLine(Regex.IsMatch("d", @"['0000-'007F]+"));

引发以下错误:

ArgumentException4解析"['0000-'007F]+"- [x-y]范围反向秩序。

和使用this:

Console.WriteLine(Regex.IsMatch("d", @"'L{IsBasicLatin}{1}"));

给我:

解析"'L{IsBasicLatin}{1}" -无法识别的转义序列'L

在我的实际情况中,我将用IsCyrillic替换IsLatin,但我需要使其与拉丁语一起工作,以确保它是OK

谁能告诉我做错了什么?

如何使用.net匹配Unicode字符

您正在使用八进制字符表示而不是十六进制,这会创建一个无效范围(因为首先,'000被解析为八进制字符,然后遇到0-'007并导致错误,因为0具有32十进制代码)。

使用'x'u符号,例如:

['x00-'x7F]+

这将捕获整个ASCII范围以及控制字符(包括。NULL符号)。

第二个问题,你需要使用'p与脚本名称,例如

'p{IsBasicLatin}