[英]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.