簡體   English   中英

替換字符的第n個索引

[英]Replace the nth index of a character

如何僅使用Regex替換字符的第n個索引。

string input = "%fdfdfdfdfdfdfdfdfdfdfdffd";
string result = Regex.Replace(input, "^%", "");

上面的代碼用空字符串替換了第一個字符,但是,我想指定一個索引:像第n個索引一樣,以便用空字符串替換字符。

有人可以在這里幫我嗎。

可以創建一個正則表達式模式,以捕獲替換字符前后的所有字符,然后將整個字符串替換為由新字符分隔的兩次捕獲。 例如:

Regex.Replace("abcdefgh", @"^(.{4}).(.*)$", @"$1E$2") // returns "abcdEfgh"

然后,您可以創建一個方法來替換特定索引處的字符:

string ReplaceCharacter(string text, int index, char value)
    => Regex.Replace(text, $@"^(.{{{index}}}).(.*)$", $@"${{1}}{value}${{2}}");

// Usage:
ReplaceCharacter("Foo-bar", 3, 'l') // returns "Foolbar"

僅Regex可能無法完成您想做的事情。 這有點作弊:

var input = "%fdfd678dfdfdfdfdfdfdfdffd";

var result = Regex.Replace(input, "^.{7}", input.Substring(0,6));

Console.WriteLine($"result = {result}");

正如Johan Wentholt在評論中所說,您可以完美地使用Regex.Replace從行首開始匹配多個字符,並將其替換為比完整匹配的字符少一個字符的捕獲組:

String result = Regex.Replace(input, "^(.{" + index + "}).", "$1");

這與“ index乘以任何字符,然后在字符串的開頭再匹配另一個字符”相匹配,但是僅用“ index乘以任何字符,而不是最后一個字符”來替換它,因為最后一個點在捕獲組之外。

如果要用空字符串以外的其他東西替換,只需將其連接到"$1"替換字符串的末尾。 為了安全起見,您應該將其替換為"${1}"以避免在后面添加的部分以數字開頭時出現問題,因為這會更改捕獲組的編號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM