got*_*tqn 3 .net c# regex unicode linqpad
我想使用正则表达式匹配Unicode字符.我发现这可以使用Unicode类别或块或更准确地使用这些Unicode类别和支持的命名块.
问题是我无法使其正常使用LINQPAD 4和Regex.IsMatch运行.例如,尝试匹配一个简单的拉丁字符,如下所示:
Console.WriteLine(Regex.IsMatch("d", @"[\0000-\007F]+"));
Run Code Online (Sandbox Code Playgroud)
引发以下错误:
ArgumentException4以相反的顺序解析"[\ 0000-\007F] +" - [xy]范围.
并使用这个:
Console.WriteLine(Regex.IsMatch("d", @"\L{IsBasicLatin}{1}"));
Run Code Online (Sandbox Code Playgroud)
给我:
解析"\ L {IsBasicLatin} {1}" - 无法识别的转义序列\ L.
在我的实际案例中,我将替换IsLatin为IsCyrillic,但我需要使它与拉丁语一起使用以确保它是OK.
谁能说出我做错了什么?
您正在使用字符的八进制表示而不是十六进制,这会创建一个无效的范围(因为首先,它\000被解析为八进制字符,然后0-\007遇到并导致错误,因为0有一个32十进制代码).
使用\x或\u表示法,例如:
[\x00-\x7F]+
Run Code Online (Sandbox Code Playgroud)
这将捕获整个ASCII范围以及控制字符(包括NULL符号).
第二个问题,您需要使用\p脚本名称,例如
\p{IsBasicLatin}
Run Code Online (Sandbox Code Playgroud)
在此处查看有关Unicode类别的更多信息.