文本处理工具类
对网上常见的文本处理做了整理,以备后用,持续更新中……
public class TextFormat
{
/// <summary>
/// 全角转半角。
/// </summary>
public static string ToDBC(string text)
{
char[] c = text.ToCharArray();
for (int i = 0; i < c.Length; i++)
{
if (c[i] == 12288)
{
c[i] = (char)32;
continue;
}
if (c[i] > 65280 && c[i] < 65375)
c[i] = (char)(c[i] - 65248);
}
return new string(c);
}
/// <summary>
/// 去除HTML标签。
/// </summary>
public static string FilterHtmlTag(string text)
{
return Regex.Replace(text, "<[^>]+>", "");
}
/// <summary>
/// 剔除非常规字符。
/// </summary>
/// <remarks>
/// 网上常用的汉字范围是U4E00-U9FA5,这个范围是“中日韩统一表意文字”,但要包含全部,则还要兼容他们的扩展集2E80-A4CF、F900-FAFF、FE30-FE4F。
/// 2E80-A4CF:包含了中日朝部首补充、康熙部首、表意文字描述符、中日朝符号和标点、日文平假名、日文片假名、注音字母、谚文兼容字母、象形字注释标志、注音字母扩展、中日朝笔画、日文片假名语音扩展、带圈中日朝字母和月份、中日朝兼容、中日朝统一表意文字扩展A、易经六十四卦符号、中日韩统一表意文字、彝文音节、彝文字根
/// F900-FAFF:中日朝兼容表意文字
/// FE30-FE4F:中日朝兼容形式
///
/// GB2312:u00a4-u9fa0、uff01-uffe5
///
/// 见:http://ju.outofmemory.cn/entry/53571
///
/// 标准CJK文字:u3400-u4DB5,u4E00-u9FA5,u9FA6-u9FBB,uF900-uFA2D,uFA30-uFA6A,uFA70-uFAD9
/// 全角ASCII、全角中英文标点、半宽片假名、半宽平假名、半宽韩文字母范围:uFF00-uFFEF
/// CJK部首补充:u2E80-u2EFF
/// CJK标点符号:u3000-u303F
/// CJK笔划:u31C0-u31EF
/// 康熙部首:u2F00-u2FDF
/// 汉字结构描述字符:u2FF0-u2FFF
/// 注音符号:u3100-u312F
/// 注音符号(闽南语、客家语扩展):u31A0-u31BF
/// 日文平假名:u30A0-u30FF
/// 日文片假名拼音扩展:u31F0-u31FF
/// 韩文拼音:uAC00-uD7AF
/// </remarks>
public static string FilterMeanlessWord(string text)
{
return Regex.Replace(text, "[^u4e00-u9fa50-9a-zA-Z]", "");
}
/// <summary>
/// 剔除常用标点。
/// </summary>
public static string FilterCommonPunctuation(string text)
{
return Regex.Replace(text, @"[~!@#$%^&*()+=|\}]{[:;<,>?/""_-`.']+", "");
}
/// <summary>
/// 转换会小写。
/// </summary>
public static string ToLower(string text)
{
return text.ToLower();
}
/// <summary>
/// 过滤空格。
/// </summary>
public static string FilterSpace(string text)
{
return Regex.Replace(text, "[\s]+", "");
}
/// <summary>
/// 转换为Unicode字符。
/// </summary>
public static string ToUnicode(string text)
{
StringBuilder result = new StringBuilder();
for (int i = 0; i < text.Length; i++)
{
if (".$^{[(|)*+?\".Contains(text[i].ToString()))
{
byte[] bytes = Encoding.Unicode.GetBytes(text[i].ToString());
result.Append("\u");
result.Append(bytes[1].ToString("x").PadLeft(2, '0'));
result.Append(bytes[0].ToString("x").PadLeft(2, '0'));
}
else
{
result.Append(text[i]);
}
}
return result.ToString();
}
/// <summary>
/// 大小写金额转换。
/// </summary>
public static string ToChMoney(double money)
{
string s = money.ToString("#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A");
string d = Regex.Replace(s, @"((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L.]|$))))|((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[.]|$))))", "${b}${z}");
return Regex.Replace(d, ".", m => "负圆空零壹贰叁肆伍陆柒捌玖空空空空空空空分角拾佰仟万亿兆京垓秭穰"[m.Value[0] - '-'].ToString());
}
/// <summary>
/// 中文转数字。
/// </summary>
public static string ChToNum(string text)
{
StringBuilder tb = new StringBuilder();
foreach (var c in text)
{
switch (c)
{
case '零': tb.Append(0); break;
case '一': tb.Append(1); break; //数字处理时考虑到一类似于—,可以不做转换
case '二': tb.Append(2); break;
case '三': tb.Append(3); break;
case '四': tb.Append(4); break;
case '五': tb.Append(5); break;
case '六': tb.Append(6); break;
case '七': tb.Append(7); break;
case '八': tb.Append(8); break;
case '九': tb.Append(9); break;
case '壹': tb.Append(1); break;
case '贰': tb.Append(2); break;
case '叁': tb.Append(3); break;
case '肆': tb.Append(4); break;
case '伍': tb.Append(5); break;
case '陆': tb.Append(6); break;
case '柒': tb.Append(7); break;
case '捌': tb.Append(8); break;
case '玖': tb.Append(9); break;
default: tb.Append(c); break;
}
}
return tb.ToString();
}
}