替换第二次出现?与&

时间:2014-05-08 16:13:32

标签: c# regex

有没有人可以提供相应的代码来替换"?"的第二个实例。在带有"&"的字符串中?

我环顾四周但似乎没有这样做,而且我开始时并不是很热的正则表达式。

由于

5 个答案:

答案 0 :(得分:4)

您可以使用IndexOf指定起始索引来查找第二个问号的索引,然后使用Substring

var index = input.IndexOf('?', input.IndexOf('?') + 1);
var ouput = string.Concat(input.Substring(0,index), "&", input.Substring(index + 1));

或者:

var output = new string(input.Select((c, i) => i == index ? '&' : c).ToArray());

您还可以编写扩展方法:

public static string ReplaceWith(
        this string source, 
        char charToReplace,
        int index)
{
    if(source == null) throw new ArgumentNullException("source");

    if (index == -1) return source;

    var output = new char[source.Length];

    for (int i = 0; i < source.Length; i++)
    {
        if (i != index) output[i] = source[i];

        else output[i] = charToReplace;

    }
    return new string(output);
}

然后使用它:

var index = input.IndexOf('?', input.IndexOf('?') + 1);
var output = input.ReplaceWith('&', index);

答案 1 :(得分:3)

取代:

(.*?\?.*?)(\?)(.*)
如果您想使用正则表达式,请使用$1&$3

答案 2 :(得分:2)

这是使用此Replace重载执行此操作的方法。

var regex = new Regex(@"(^.*?\?.*?)(\?)");
var r = regex.Replace("asdf ? fdas ? jkl ?", m => m.Groups[1] + "&", 1).Dump();
// asdf ? fdas & jkl ?

答案 3 :(得分:2)

最简单的Regex可能是:

var regex = new Regex(@"(\?.*?)\?");
var test = "asdf?a=5?b=6&c=2";
test = regex.Replace(test, @"$1&"); // asdf?a=5&b=6&c=2

var test2 = "asdf?a=5?b=6?c=2";
test2 = regex.Replace(test, @"$1&"); // asdf?a=5&b=6?c=2

它将用?替换第二个&,但如果它们存在,则不会替换第三个/第四个/等。

答案 4 :(得分:0)

请参考下面的示例,该示例用于删除给定字符串中第二和第三次出现的$。

string s = "like for example $  you don't have $  network $  access";       
Regex rgx = new Regex("\\$\\s+");
s = Regex.Replace(s, @"(\$\s+.*?)\$\s+", "$1$$");