我想用正则表达式去匹配Unicode,
创建了以下正则表达式:Regex reg = new Regex("\\u[0-9a-fA-F]{4}");但运行时提示“正在分析“\u[0-9a-fA-F]{4}”- 十六进制位数不足。”,正确的正则表达式应该怎么改?
创建了以下正则表达式:Regex reg = new Regex("\\u[0-9a-fA-F]{4}");但运行时提示“正在分析“\u[0-9a-fA-F]{4}”- 十六进制位数不足。”,正确的正则表达式应该怎么改?
调试欢乐多
在正则中转义“\”,如果不加@时,需要用“\\\\”来转义,加@时,用“\\”来转义
string test = "\\u4E2D\\u56FD";
//Regex reg = new Regex("\\\\u[0-9a-fA-F]{4}");
Regex reg = new Regex(@"\\u[0-9a-fA-F]{4}");
MatchCollection mc = reg.Matches(test);
foreach(Match m in mc)
{
richTextBox2.Text += m.Value + "\n";
}
/*输出
\u4E2D
\u56FD
*/
string str="\u4E2D\u56FD";
然后去匹配
很显然,楼主根本不懂编码你以为str就是你字面上写的那样吗?str中只有两个字符,\u4E2D是一个字符(具体是哪一个懒得查)又如:
string str="\u0041\u0042";
这个完全等价于
string str="ab";所以你的问题就变成了,怎么从"ab"里匹配:
Regex reg = new Regex("\\u[0-9a-fA-F]{4}");
Regex reg = new Regex("[\\u0000-\\uffff]");
using System.Text.RegularExpressions;public class Program
{
static void Main()
{
Regex reg = new Regex("[\\u0000-\\uffff]");
string str = "\u4E2D\u56FD";
Console.WriteLine("原字符串: {0}\n正则匹配:", str);
foreach (Match m in reg.Matches(str))
{
Console.WriteLine(m.Value);
}
}
}
/* 输出:
原字符串: 中国
正则匹配:
中
国
*/
Regex reg = new Regex("[\\u0000-\\uffff]");
// 基本相当于:
Regex reg = new Regex("(?s).");