【正则相关】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!