一个正则的问题

laoyebin 2010-03-17 07:53:16
9.1(2) ------ 9.11
9(3).5(1) ----- 999.5
89(2).7 ------ 899.7


即括号前的一个数重复括号中的次数,无括号和(1)都是重复一次
能不能用一个正则就直接得出呢?
...全文
192 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
laoyebin 2010-03-17
  • 打赏
  • 举报
回复
哈哈,高手真多,慢慢研究研究
jiangshun 2010-03-17
  • 打赏
  • 举报
回复
            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
*/
tianliang1 2010-03-17
  • 打赏
  • 举报
回复
应该可以通过一个字符串的操作,在好好写一个满足你要求的算法,可以实现。
showlie 2010-03-17
  • 打赏
  • 举报
回复
试试这个:
(\d(\(\d+\))?)+\.?(\d(\(\d+\))?)*
-过客- 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wuyi8808 的回复:]
客客比我快了1秒!
[/Quote]




方法都一样,英雄所见略同,咔。。。
wuyi8808 2010-03-17
  • 打赏
  • 举报
回复
客客比我快了1秒!
wuyi8808 2010-03-17
  • 打赏
  • 举报
回复
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
}
}
-过客- 2010-03-17
  • 打赏
  • 举报
回复
哈,又找到一个好玩的问题,正则+委托

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
*/
波导终结者 2010-03-17
  • 打赏
  • 举报
回复
正则只处理字符,所以一般是把括号里的数字取出来,到程序里再做替换
laoyebin 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lxcnn 的回复:]
“9.1(2)”这是一个变量的输入,根据这个动态生成按你所说规则的正则?

那是想用来验证、提取、替换还是其它
[/Quote]

就是把括号里的数字替换成括号前的数字的N次
showlie 2010-03-17
  • 打赏
  • 举报
回复
你是不是想正则9.1(2) 用 9.11来替换?
-过客- 2010-03-17
  • 打赏
  • 举报
回复
“9.1(2)”这是一个变量的输入,根据这个动态生成按你所说规则的正则?

那是想用来验证、提取、替换还是其它
-过客- 2010-03-17
  • 打赏
  • 举报
回复
不是很理解你的需求,究竟要做些什么

你最后想实现的效果是什么,或者说如何应用

laoyebin 2010-03-17
  • 打赏
  • 举报
回复
正则高手来看看哟

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧