如何使用.net匹配Unicode字符?

时间:2015-05-18 08:17:03

标签: c# .net regex unicode linqpad

我想使用正则表达式匹配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.

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

有谁能说出我做错了什么?

1 个答案:

答案 0 :(得分:5)

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

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

\u

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

第二个问题,您需要将[\x00-\x7F]+ 与脚本名称一起使用,例如

\p

详细了解Unicode categories here