比如有一字符串
sBody=a,<bZX>,c,<ddd>,d,,<e>,...我现在想把<bZX>替换成xxx,
如果用
pattern="<[\w]*>";
Regex.Replace(sBody,pattern,"xxx",RegexOptions.IgnoreCase);
就把后面的也替换了,如何只替换第一个?
先谢谢.
sBody=a,<bZX>,c,<ddd>,d,,<e>,...我现在想把<bZX>替换成xxx,
如果用
pattern="<[\w]*>";
Regex.Replace(sBody,pattern,"xxx",RegexOptions.IgnoreCase);
就把后面的也替换了,如何只替换第一个?
先谢谢.
解决方案 »
- c#如何访问exchangeServer获取邮件?
- C#序列化的问题
- C# WinForm没人问过的问题: richtextbox 如 何 实 现 文 本 "反 选"
- c#做的应用程序生成软件后,桌面图标怎么改成自定义的?
- 我得到了一个 string ,怎样才能转换成 StreamReader,然后作为参数传给另外一个函数呢?
- UPDATE smsin SET read = 1 WHERE ID = "+strMsg+" 这条语句执行不了是什么问题?
- 关于线程的一个菜鸟问题?
- 请叫一个关于udp传送文件的问题,我快疯了.
- 这个网站 精确的北京时间 是如何获取的
- 用C#做浏览器,用什么控件
- ClickOnce发布过程中遇到的问题
- c#与西门子s7-400通讯
从输入字符串中的第一个字符开始,用指定的替换字符串替换由 Regex 构造函数中指定的正则表达式定义的指定数目的模式匹配项。
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) 最新版本:20070212http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
sBody="a,<bZX>,c,<ddd>,d,,<e>,..."
当中,<bZX>与其它相似字符例如<ddd>,<e>如何区分楼主所写正则<[\w]*>可以匹配任何以“<”开头,“>”结束,中间是字母的字符串,当然会替换所有了
System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"^[^<^>]*(<[^<^>.]*>)");
if(regex.IsMatch(nameStr))
{
System.Text.RegularExpressions.Match match = regex.Match(nameStr, 0);
if(match.Groups.Count > 1)
{
nameStr = nameStr.Replace(match.Groups[1].Value, "***");
}
}
我其实现在想替换的是以“<”开头,“>”结束的,出现的第一个字符串.其他的仍然保留.
当然用其他方式也能解决,我只想通过正则实现.
if (Regex .IsMatch (str ,"<\\w+>"))
{
str = str.Replace(Regex.Match(str, "<\\w+>").Groups[0].Value, "xxx");
}
Regex reg=new Regex(pattern,RegexOptions.IgnoreCase);
MessageBox.Show( reg.Replace(sBody,"xxx",1));
Regex reg=new Regex(@"<[\w]*>");
sBody=sBody.Replace(reg.Match(sBody).Value,"xxx");
//要利用其匹配结果的特性
"a,<bZX>,c,<bZX>,d,<bZX>,e,<bZX>,...";" 特别是这样的串
"a,<bZX>,c,<bZX>,d,<bZX>,e,<bZX>,...";" 用这个试下
string pattern = @"(?<![\s\S]*?<[^>]*?>[\s\S]*?)<[^>]*?>";
string resultStr = Regex.Replace(yourStr, pattern, "xxx", RegexOptions.IgnoreCase);
替换第n个,没有做,说下我现在想到的比较通用的方法吧先用正则把包含前n-1个的截取出来,放入sub1里,后面的放sub2里,然后对sub2做如上方法替换掉第一个,再su1+sub2就可以了,可能效率不高,有空再想想吧
不用的 呵呵 我给你写个你 看看
string sBody="a,<bZX>,c,<bZX>,d,,<e>,...";
MatchCollection mc= Regex.Matches(sBody,@"<[\w]*>");
Match m= mc[1];//替换第二个
sBody=new Regex(m.Value).Replace(sBody,"xxx",1,m.Index);
//能看明白我的意图吧
了解,又学到一着,头脑不灵活,呵呵
Regex.Replace(sBody,pattern, "xxx ",RegexOptions.IgnoreCase);
pattern= "(<\w+>)+?";
Regex.Replace(sBody,pattern, "xxx ",RegexOptions.IgnoreCase);