【问题标题】:How to match Unicode character using .net?如何使用 .net 匹配 Unicode 字符?
【发布时间】:2015-07-29 15:52:06
【问题描述】:

我想使用正则表达式匹配 Unicode 字符。我发现这可以使用Unicode Category or Block 或更准确地使用这些Unicode CategoriesSupported Named Blocks

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

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

引发以下错误:

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

并使用这个:

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

给我:

解析“\L{IsBasicLatin}{1}” - 无法识别的转义序列 \L。

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

谁能告诉我做错了什么?

【问题讨论】:

标签: c# .net regex unicode linqpad


【解决方案1】:

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

使用\x\u 表示法,例如:

[\x00-\x7F]+

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

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

\p{IsBasicLatin}

查看更多关于Unicode categories here的信息。

【讨论】:

    猜你喜欢
    • 2012-05-11
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多