如何仅使用Regex替换字符的第n个索引。
RewriteEngine on RewriteCond %{HTTP_USER_AGENT}
iPhone RewriteRule .* http://domain-for-redirect.com/ [R]
RewriteEngine on RewriteCond %{HTTP_USER_AGENT}
iPad RewriteRule .* http://domain-for-redirect.com/ [R]
上面的代码用空字符串替换了第一个字符,但是,我想指定一个索引:像第n个索引一样,以便用空字符串替换字符。
有人可以在这里帮我吗
答案 0 :(得分:3)
可以创建一个正则表达式模式,以捕获替换字符前后的所有字符,然后将整个字符串替换为由新字符分隔的两次捕获。例如:
Regex.Replace("abcdefgh", @"^(.{4}).(.*)$", @"$1E$2") // returns "abcdEfgh"
然后您可以创建一种方法来替换特定索引处的字符:
string ReplaceCharacter(string text, int index, char value)
=> Regex.Replace(text, $@"^(.{{{index}}}).(.*)$", $@"$MyGroupBox
{value}${{2}}");
// Usage:
ReplaceCharacter("Foo-bar", 3, 'l') // returns "Foolbar"
答案 1 :(得分:0)
仅Regex可能无法完成您想做的事情。这有点作弊:
var input = "%fdfd678dfdfdfdfdfdfdfdffd";
var result = Regex.Replace(input, "^.{7}", input.Substring(0,6));
Console.WriteLine($"result = {result}");
答案 2 :(得分:0)
正如约翰·温索尔特(Johan Wentholt)在评论中所说,您可以完美地使用Regex.Replace
从行首开始匹配多个字符,并用比完整匹配的字符少一个字符的捕获组替换它: / p>
String result = Regex.Replace(input, "^(.{" + index + "}).", "$1");
这将匹配“ index
乘以任何字符,然后在字符串的开头再匹配另一个字符”,但是仅用“ index
乘以任何字符”来替换,而没有最后一个字符,因为最后一个点在捕获组之外。
如果要用空字符串以外的其他内容替换,只需将其连接到"$1"
替换字符串的末尾即可。尽管为了安全起见,您应该用"${1}"
替换它,以避免在后面添加的部分以数字开头的问题,因为那样会更改捕获组的编号。