请把字符串A2B4C1D5E11转换成AABBBBCDDDDDEEEEEEEEEEE!c#实现.简洁的写法!
解决方案 »
- C# winform中label控件的运动轨迹
- 救各位高手隱士高人江湖大俠按鍵相助.utf8與unicode這個問題..心急火燎......
- 有没有把C#的执行文件编译成脱离.net独立运行的程序?
- 开始学习C#,报个道。顺便问个问题。
- C# 初学C# 问个关于如何操作Excel表的问题
- 在c#中使用treelist控件 添加节点问题!!!在线等
- [求助]winform动态删除控件
- 发E-mail的问题!请教!
- ********如何把图片加入.net下的资源文件中?????**********************
- 用代理实现?
- 如何用代码调用SQL连接配置向导
- C# 如何定义这么一个水平导航栏?[带图]
for(int index = 0; index < str.Length; index += 2)
{
char subStr = str[index];
int num = Convert.ToInt32(str.Substring(index + 1, 1);
for(int jndex = 0; jndex < num; jndex++)
{
sb.Append(subStr);
}
}
string msg = "A2B4C1D5E11";
string ret = ConvertString(msg); public string ConvertString(string input)
{
string pattern = @"\p{L}\d+"; // 或 @"[a-zA-Z]\d+"
Regex regex = new Regex(pattern);
List<LetterCount> list = new List<LetterCount>();
StringBuilder builder = new StringBuilder();
for (Match match = regex.Match(input); match.Success; match = match.NextMatch())
{
LetterCount let = new LetterCount(match.Value);
builder.Append(let.ToString());
} return builder.ToString();
} public struct LetterCount
{
public char Letter;
public int Count; public LetterCount(string val)
{
Letter = val[0];
Count = Convert.ToInt32(val.Substring(1));
} public string ToString()
{
StringBuilder builder = new StringBuilder();
for (int i = 0; i < Count; i++)
{
builder.Append(Letter);
}
return builder.ToString();
}
}
{
char[] _ValueList = _Value.ToCharArray();
int flag = 0;
int dig = 0;
char cha = Char.MinValue;
string finalStr = "";
for (int i = 0; i < _ValueList.Length; i++)
{
if (Char.IsDigit(_ValueList[i]))
{
dig = dig * 10 + int.Parse(_ValueList[i].ToString());
if (i + 1 < _ValueList.Length && Char.IsLetter(_ValueList[i + 1]))
{
flag = 1;
}
else if (i + 1 == _ValueList.Length)
{
flag = 1;
}
}
else
{
cha = _ValueList[i];
}
if (flag == 1)
{
finalStr += new string(cha, dig);
flag = 0;
dig = 0;
cha = Char.MinValue;
}
}
return finalStr;
}
{
string sInput, sRegex;
sInput = "A3B4E11";
// A very simple regular expression.
sRegex = "[a-zA-Z]{1}[1-9]?[0-9]*";
Regex r = new Regex(sRegex);
MyClass c = new MyClass();.
MatchEvaluator myEvaluator = new MatchEvaluator(c.ReplaceCC);
Console.WriteLine(sInput);
sInput = r.Replace(sInput, myEvaluator);
Console.WriteLine(sInput);
}
public string ReplaceCC(Match m)
{
string strTemp = m.ToString();
string ostr = strTemp[0].ToString();
string strnewTemp = "[" + strTemp[0] + "]{"+strTemp.Substring(1,strTemp.Length-1)+"}";
Regex or = new Regex(strnewTemp);
while(!or.IsMatch(ostr))
{
ostr+=strTemp[0].ToString();
Console.WriteLine(ostr);
}
return ostr;
}
char[] charry = s.ToCharArray();
char p = '0';
int num =0;
StringBuilder b = new StringBuilder(); foreach (char c in charry)
{
if (Char.IsLetter(c))
{
if (num == 0)
{
p = c;
}
else
{
string ss = new string(p, num);
b.Append(ss);
num = 0;
p = c;
}
}
else
if (Char.IsDigit(c))
{
if (num != 0)
{
int l = num.ToString().Length;
string s1 = "1";
string s2 = new string('0', l);
s2 = s1 + s2;
num = num + (int)Char.GetNumericValue(c) * Convert.ToInt32(s2);
}
else
{
num = (int)Char.GetNumericValue(c);
}
}
}
if (num != 0)
{
string ss = new string(p, num);
b.Append(ss);
}
MessageBox.Show(b.ToString());
(1) new string(char c, int count)
(2) MatchEvaluator 委托重写代码如下:
string msg = "A2B4C1D5E11";
string ret = ConvertString(msg); public string ConvertString(string input)
{
string pattern = @"\p{L}\d+"; // 或 @"[a-zA-Z]\d+"
Regex regex = new Regex(pattern);
MatchHandler handler = new MatchHandler();
MatchEvaluator evaluator = new MatchEvaluator(handler.Replace); return regex.Replace(input, evaluator);
} public class MatchHandler
{
public string Replace(Match match)
{
char letter = match.Value[0];
int count = Convert.ToInt32(match.Value.Substring(1)); return new string(letter, count);
}
}
using System.Text.RegularExpressions;
string str = "A2B4C1D5E11";
StringBuilder sb = new StringBuilder();
foreach (Match m in Regex.Matches(str, @"([a-zA-Z])(\d+)"))
sb.Append(new string(m.Groups[1].Value[0], int.Parse(m.Groups[2].Value)));
string result = sb.ToString();
string s2 = "";
MatchCollection mc = Regex.Matches(s1, @"[A-Z]\d+");
foreach (Match match in mc) s2 = s2.PadRight(s2.Length + int.Parse(match.Value.Substring(1)), match.Value[0]);
Console.WriteLine(s2);
(Match m)
{
return new string(m.Groups[1].Value[0], Convert.ToInt32(m.Groups[2].Value));
});