日期:2014-05-17  浏览次数:21222 次

【正则相关】c#中只想对字符串匹配第一次出现
题目比较朦胧,这里解释一下。
比如。

从数据库里读出一段文字如下
str = "abcdefgabcdefgh"

当我Regex.Replace(str,"[ach]","!");了之后
会得到结果
"!b!defg!b!defg!"

也就是说,对于"[ach]"这个正则,匹配了多少次就进行了多少次的替换。
而我想实现的效果是

"!b!defgabcdefg!"
只换掉第一次出现的符合正则表达式的结果。

之所以一开始想到使用正则,是因为匹配的目标字符不是固定的。
比如下次可能我要匹配的是任意出现的"d"和"e"。可以不出现,可以出现,但是出现的话只匹配一次。
而用正则的[]括起来是最简单的能找到他们的方法。

如果不用这个实现,我只能想到把目标字符挨个循环去字符串里找IndexOf了。。但是这样未必比正则快吧。
如果正则的写法能写出来,或者regex类里有什么方法或属性能实现就最好不过了。

来求教~~

------解决方案--------------------
正则应该很难做到

测试如下

string str = "abcdefgabcdefgh";
            string condition = "ach";
            str=string.Join("",str.Select((a, index) => 
            {
                if (condition.Contains(a))
                {
                    condition=condition.Replace(a.ToString(),"");
                    return '!';
                }
                else
                    return a;

            }));
            //!b!defgabcdefg!