如何使用 .net 匹配 Unicode 字符?
How to match Unicode character using .net?
我想使用正则表达式匹配 Unicode 字符。我发现使用 Unicode Category or Block or more precisely using these Unicode Categories and Supported Named Blocks 是可能的。
问题是我无法使用 LINQPAD 4
和 Regex.IsMatch
函数使其工作。例如,尝试匹配这样一个简单的拉丁字符:
Console.WriteLine(Regex.IsMatch("d", @"[[=10=]00-[=10=]7F]+"));
引发以下错误:
ArgumentException4 parsing "[[=17=]00-[=17=]7F]+" - [x-y] range in reverse
order.
并使用这个:
Console.WriteLine(Regex.IsMatch("d", @"\L{IsBasicLatin}{1}"));
给我:
parsing "\L{IsBasicLatin}{1}" - Unrecognized escape sequence \L.
在我的真实情况下,我将用 IsCyrillic
替换 IsLatin
,但我需要使其与拉丁文一起使用以确保它是 OK
。
谁能告诉我哪里做错了?
您正在使用 octal representation 个字符而不是 十六进制 ,这会创建一个无效范围(因为首先,[=12=]0
被解析为八进制字符,则遇到 0-[=13=]7
并导致错误,因为 0
有一个 32
十进制代码)。
使用\x
或\u
表示法,例如:
[\x00-\x7F]+
这将捕获整个 ASCII 范围以及控制字符(包括 NULL 符号)。
而第二个问题,你需要在脚本名称中使用\p
,例如
\p{IsBasicLatin}
查看有关 Unicode categories here 的更多信息。
我想使用正则表达式匹配 Unicode 字符。我发现使用 Unicode Category or Block or more precisely using these Unicode Categories and Supported Named Blocks 是可能的。
问题是我无法使用 LINQPAD 4
和 Regex.IsMatch
函数使其工作。例如,尝试匹配这样一个简单的拉丁字符:
Console.WriteLine(Regex.IsMatch("d", @"[[=10=]00-[=10=]7F]+"));
引发以下错误:
ArgumentException4 parsing "[[=17=]00-[=17=]7F]+" - [x-y] range in reverse order.
并使用这个:
Console.WriteLine(Regex.IsMatch("d", @"\L{IsBasicLatin}{1}"));
给我:
parsing "\L{IsBasicLatin}{1}" - Unrecognized escape sequence \L.
在我的真实情况下,我将用 IsCyrillic
替换 IsLatin
,但我需要使其与拉丁文一起使用以确保它是 OK
。
谁能告诉我哪里做错了?
您正在使用 octal representation 个字符而不是 十六进制 ,这会创建一个无效范围(因为首先,[=12=]0
被解析为八进制字符,则遇到 0-[=13=]7
并导致错误,因为 0
有一个 32
十进制代码)。
使用\x
或\u
表示法,例如:
[\x00-\x7F]+
这将捕获整个 ASCII 范围以及控制字符(包括 NULL 符号)。
而第二个问题,你需要在脚本名称中使用\p
,例如
\p{IsBasicLatin}
查看有关 Unicode categories here 的更多信息。