有没有人可以提供相应的代码来替换"?"的第二个实例。在带有"&"的字符串中?
我环顾四周但似乎没有这样做,而且我开始时并不是很热的正则表达式。
由于
答案 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$$");