原本是群里某位大哥发的JavaScript版,因为项目里需要,改写成了C#版的,希望能对需要的人帮点忙哈~~~
1
/// <summary>
2
/// 将中文数字替换为阿拉伯数字
3
/// </summary>
4
/// <param name="word"></param>
5
/// <returns></returns>
6
public static string WordToNumber(string word)
7
{
8
string e = "([零一二三四五六七八九十百千万亿])+";
9
MatchCollection mc = Regex.Matches(word, e);
10
11
foreach(Match m in mc)
12
{
13
word = word.Replace(m.Value, Word2Number(m.Value));
14
}
15
return word;
16
}
17
18
private static string Word2Number(string w)
19
{
20
if(w == "")
21
return w;
22
23
string e = "零一二三四五六七八九";
24
string[] ew = new string[]{"十", "百", "千"};
25
string ewJoin = "十百千";
26
string[] ej = new string[]{"万", "亿"};
27
28
string rss = "^([" + e + ewJoin + "]+" + ej[1] + ")?([" + e
29
+ ewJoin + "]+" +ej[0] + ")?([" + e + ewJoin + "]+)?$";
30
string[] mcollect = Regex.Split(w, rss);
31
if(mcollect.Length < 4)
32
return w;
33
return (
34
Convert.ToInt64(foh(mcollect[1])) * 100000000 +
35
Convert.ToInt64(foh(mcollect[2])) * 10000 +
36
Convert.ToInt64(foh(mcollect[3]))
37
).ToString();
38
}
39
40
private static int foh(string str)
41
{
42
string e = "零一二三四五六七八九";
43
string[] ew = new string[]{"十", "百", "千"};
44
string[] ej = new string[]{"万", "亿"};
45
46
int a = 0;
47
if(str.IndexOf(ew[0]) == 0)
48
a = 10;
49
str = Regex.Replace(str, e[0].ToString(), "");
50
51
if(Regex.IsMatch(str, "([" + e + "])$"))
52
{
53
a += e.IndexOf(Regex.Match(str, "([" + e + "])$").Value[0]);
54
}
55
56
if(Regex.IsMatch(str, "([" + e + "])" + ew[0]))
57
{
58
a += e.IndexOf(Regex.Match(str, "([" + e + "])" + ew[0]).Value[0]) * 10;
59
}
60
61
if(Regex.IsMatch(str, "([" + e + "])" + ew[1]))
62
{
63
a += e.IndexOf(Regex.Match(str, "([" + e + "])" + ew[1]).Value[0]) * 100;
64
}
65
66
if(Regex.IsMatch(str, "([" + e + "])" + ew[2]))
67
{
68
a += e.IndexOf(Regex.Match(str, "([" + e + "])" + ew[2]).Value[0]) * 1000;
69
}
70
return a;
71
}
/// <summary>2
/// 将中文数字替换为阿拉伯数字3
/// </summary>4
/// <param name="word"></param>5
/// <returns></returns>6
public static string WordToNumber(string word)7
{8
string e = "([零一二三四五六七八九十百千万亿])+";9
MatchCollection mc = Regex.Matches(word, e);10

11
foreach(Match m in mc)12
{13
word = word.Replace(m.Value, Word2Number(m.Value));14
}15
return word;16
}17

18
private static string Word2Number(string w)19
{20
if(w == "")21
return w;22

23
string e = "零一二三四五六七八九";24
string[] ew = new string[]{"十", "百", "千"};25
string ewJoin = "十百千";26
string[] ej = new string[]{"万", "亿"};27

28
string rss = "^([" + e + ewJoin + "]+" + ej[1] + ")?([" + e29
+ ewJoin + "]+" +ej[0] + ")?([" + e + ewJoin + "]+)?$";30
string[] mcollect = Regex.Split(w, rss);31
if(mcollect.Length < 4)32
return w;33
return (34
Convert.ToInt64(foh(mcollect[1])) * 100000000 +35
Convert.ToInt64(foh(mcollect[2])) * 10000 +36
Convert.ToInt64(foh(mcollect[3]))37
).ToString();38
}39

40
private static int foh(string str)41
{42
string e = "零一二三四五六七八九";43
string[] ew = new string[]{"十", "百", "千"};44
string[] ej = new string[]{"万", "亿"};45

46
int a = 0;47
if(str.IndexOf(ew[0]) == 0)48
a = 10;49
str = Regex.Replace(str, e[0].ToString(), "");50

51
if(Regex.IsMatch(str, "([" + e + "])$"))52
{53
a += e.IndexOf(Regex.Match(str, "([" + e + "])$").Value[0]);54
}55

56
if(Regex.IsMatch(str, "([" + e + "])" + ew[0]))57
{58
a += e.IndexOf(Regex.Match(str, "([" + e + "])" + ew[0]).Value[0]) * 10;59
}60

61
if(Regex.IsMatch(str, "([" + e + "])" + ew[1]))62
{63
a += e.IndexOf(Regex.Match(str, "([" + e + "])" + ew[1]).Value[0]) * 100;64
}65

66
if(Regex.IsMatch(str, "([" + e + "])" + ew[2]))67
{68
a += e.IndexOf(Regex.Match(str, "([" + e + "])" + ew[2]).Value[0]) * 1000;69
}70
return a;71
}



浙公网安备 33010602011771号