正则表达的替换如何跟参数

coffeewar 2007-06-18 01:46:29
using System.Text.RegularExpressions;

class RegExSample
{
static string CapText(Match m)
{
// Get the matched string.
string x = m.ToString();
// If the first char is lower case...
if (char.IsLower(x[0]))
{
// Capitalize it.
return char.ToUpper(x[0]) + x.Substring(1, x.Length-1);
}
return x;
}

static void Main()
{
string text = "four score and seven years ago";
System.Console.WriteLine("text=[" + text + "]");
string result = Regex.Replace(text, @"\w+",
new MatchEvaluator(RegExSample.CapText));
System.Console.WriteLine("result=[" + result + "]");
}
}

上面一段代码是在msdn中找到的,现在要做的是如何在 CapText方法中传进去一个参数。
...全文
264 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
-过客- 2007-06-18
  • 打赏
  • 举报
回复
看你要实现什么样的功能,达到什么样的效果吧

正则中使用委托,如果需要传参数的话,我一般是用全局变量来做的

下面这个帖子和后面帖子最后的回复都用到的全局变量,可以参考一下
http://community.csdn.net/Expert/topic/5602/5602978.xml?temp=.7702295
http://community.csdn.net/Expert/topic/5600/5600177.xml?temp=.0136835

或者楼主可以说下自己的目的,我给看下方法吧
coffeewar 2007-06-18
  • 打赏
  • 举报
回复
多谢
-过客- 2007-06-18
  • 打赏
  • 举报
回复

arr = .........; //这里对集合进行初始化,定义在外部,初始化在方法里做
string yourStr = ............;
string resultStr = Regex.Replace(yourStr, @"row\((?<row>\d+)\)\.col\((?<col>\d+)\)", new MatchEvaluator(regReplace), RegexOptions.IgnoreCase);



//不知道你这个集合的结构,应该是根据m.Groups["row"].Value和m.Groups["row"].Value这两个值取出集合里对应的数据就行了吧
DataCollection<float[]> arr;
private string regReplace(Match m)
{
return ...;
}
coffeewar 2007-06-18
  • 打赏
  • 举报
回复
写错了,

后面一句应为

只要 把 row(4).col(6) 和 row(9).col(6)分别替换成 DataCollection 里相应的数据就行了。
可能替换后的 method 为 method = 3 < 10 ? -0.8*0.6*0.6 : -5/100*0.6*8
其实意思还是一样。
coffeewar 2007-06-18
  • 打赏
  • 举报
回复
具体替换规则就如刚才我所说的差不多了。

我这里有个算法
string method = row(6).col(4)<10 ? -0.8*O.6*O.6 : -row(6).col(9)/100*O.6*8
还有一已知 List 型的数据 DataCollection<float[]>,此数据肯定要在外部初始化。

只要 把 col(4).row(6) 和 col(9).row(6)分别替换成 DataCollection 里相应的数据就行了。
可能替换后的 method 为 method = 3 < 10 ? -0.8*0.6*0.6 : -5/100*0.6*8
-过客- 2007-06-18
  • 打赏
  • 举报
回复
哦,这种情况还是用全局变量吧,否则每调用一次委托方法,就要重新创建一次
-过客- 2007-06-18
  • 打赏
  • 举报
回复
如果不需要在外部为它初始化或是对它进行操作的话,可以把它作为委托方法的一个局部变量,否则就用全局变量吧

如果需要我看下代码,说下你的具体替换规则吧
coffeewar 2007-06-18
  • 打赏
  • 举报
回复
ArrayList 里的每一项是个数组。
coffeewar 2007-06-18
  • 打赏
  • 举报
回复
我要实现的功能其实很简单,比如一个 ArrayList 包含一些数据,可能是数据库里取出来的。
另有一实现算法字符串 row(3).col(3) + 3 * 3 ....,这个字符串也许挺复杂,现在要求把row(3).col(3) 替换成 ArrayList 里行列相对应的数据。
coffeewar 2007-06-18
  • 打赏
  • 举报
回复
我也想过用全局,只是感觉不大爽,如果不得不如此那也只能如此了。谢了。
amandag 2007-06-18
  • 打赏
  • 举报
回复
only mark

等过客..

111,098

社区成员

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

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

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