一个正则的问题 9.1(2) ------ 9.119(3).5(1) ----- 999.589(2).7 ------ 899.7即括号前的一个数重复括号中的次数,无括号和(1)都是重复一次能不能用一个正则就直接得出呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 哈,又找到一个好玩的问题,正则+委托string[] input = { "9.1(2)", "9(3).5(1)", "89(2).7" };Regex reg = new Regex(@"(\d)\((\d+)\)");foreach (string s in input){ richTextBox2.Text += "源字符串:" + s.PadRight(15, ' ') + " 替换结果:" + reg.Replace(s, delegate(Match m) { return new string(m.Groups[1].Value[0], Convert.ToInt32(m.Groups[2].Value)); }) + "\n";}/*-------输出--------源字符串:9.1(2) 替换结果:9.11源字符串:9(3).5(1) 替换结果:999.5源字符串:89(2).7 替换结果:899.7*/ using System;using System.Text.RegularExpressions;class Program{ static void Main() { string input = "A9(3).5(1)B"; string output = Regex.Replace(input, @"(.)\(([0-9]+)\)", delegate(Match m){ return new string(m.Groups[1].Value[0], int.Parse(m.Groups[2].Value)); } ); Console.WriteLine(output); // 输出:A999.5B }} 本帖最后由 lxcnn 于 2010-03-17 20:59:58 编辑 试试这个:(\d(\(\d+\))?)+\.?(\d(\(\d+\))?)* string str = @"94(3).5(1)"; Regex reg = new Regex(@"(\d)(?<value>\((?<count>\d+)\))"); MatchCollection mc = reg.Matches(str); foreach (Match m in mc) { for (int i = 1; i < Convert.ToInt32(m.Groups["count"].ToString()); i++) { str = str.Insert(str.IndexOf(m.Groups["value"].ToString()), m.Groups[1].ToString()); } str = str.Replace(m.Groups["value"].ToString(), ""); } Console.WriteLine(str); /* 9444.5 */ C# 哈希表能不能绑定到下拉列表上?或者说下拉列表需要一个显示的值,但是返回的时候要的是编号,表意不清,具体如下解释: RDLC报表如何取出表达式的第n个值 自定义控件里没有FormClosed事件,怎么关闭线程什么的呢? 保证一个类无法在外部被实例化的三种方法,哪种更加好? Win7标准用户高权限启动程序时,Savefiledialog问题 一个简单的继承问题 求:.Net Framework 高级编程(中文版)电子书 对数据库分段查询的一些心得 远程数据库连接 时断时续 咋我装的msdn2003和visual stodio .net 2003的文档一模一样的?? [算法]按对象的某些属性,对列表进行重量和数量的统计 pdf文件打印(C#)
Regex reg = new Regex(@"(\d)\((\d+)\)");
foreach (string s in input)
{
richTextBox2.Text += "源字符串:" + s.PadRight(15, ' ') + " 替换结果:" + reg.Replace(s, delegate(Match m) { return new string(m.Groups[1].Value[0], Convert.ToInt32(m.Groups[2].Value)); }) + "\n";
}
/*-------输出--------
源字符串:9.1(2) 替换结果:9.11
源字符串:9(3).5(1) 替换结果:999.5
源字符串:89(2).7 替换结果:899.7
*/
using System.Text.RegularExpressions;class Program
{
static void Main()
{
string input = "A9(3).5(1)B";
string output = Regex.Replace(input, @"(.)\(([0-9]+)\)",
delegate(Match m){ return new string(m.Groups[1].Value[0], int.Parse(m.Groups[2].Value)); }
);
Console.WriteLine(output); // 输出:A999.5B
}
}
(\d(\(\d+\))?)+\.?(\d(\(\d+\))?)*
Regex reg = new Regex(@"(\d)(?<value>\((?<count>\d+)\))");
MatchCollection mc = reg.Matches(str);
foreach (Match m in mc)
{
for (int i = 1; i < Convert.ToInt32(m.Groups["count"].ToString()); i++)
{
str = str.Insert(str.IndexOf(m.Groups["value"].ToString()), m.Groups[1].ToString());
}
str = str.Replace(m.Groups["value"].ToString(), "");
}
Console.WriteLine(str);
/*
9444.5
*/