替换最后一个特定字符

时间:2017-05-19 04:47:18

标签: c# regex

我有一个这样的字符串:

string myText = "abc def ghi 123 abc def ghi 123 abc def";

我想仅将最后abc替换为空。

这是我的代码:

string pattern2 = "([abc])$";
string replacement2 = "";
Regex regEx = new Regex(pattern2);
var b = Regex.Replace(regEx.Replace(myText, replacement2), @"\s", " ");

它无法正常工作。我的代码有什么问题以及如何修复它?

4 个答案:

答案 0 :(得分:3)

使用LastIndexOfSubstring等字符串方法可以查看以下代码以及此working example

string myText = "abc def ghi 123 abc def ghi 123 abc def";
string searchStr = "abc";
int lastIndex = myText.LastIndexOf(searchStr);
if(lastIndex>=0)
  myText = myText.Substring(0,lastIndex) + myText.Substring(lastIndex+searchStr.Length);
Console.WriteLine(myText);

请注意:如果您想将abc替换为任何其他字符串,请在它们之间使用它,或者只使用String.Format加入它们,如下所示:

string replaceStr = "replaced";
string outputStr = String.Format("{0} {1}{2}",
                                 myText.Substring(0,lastIndex),
                                 replaceStr,
                                 myText.Substring(lastIndex+searchStr.Length));       

答案 1 :(得分:1)

这很简单,如何使用Remove方法

        string textToRemove = "abc";
        string myText = "abc def ghi 123 abc def ghi 123 abc def";
        myText = myText.Remove(myText.LastIndexOf(textToRemove), textToRemove.Length);
        Console.WriteLine(myText);

输出:abc def ghi 123 abc def ghi 123 def

如果您想删除123 and deftextToRemove.Length只是+ 1之间的额外空格。

输出:abc def ghi 123 abc def ghi 123 def

答案 2 :(得分:0)

C# - 替换某个字符串的第一个和最后一个

示例:

string mystring = "123xyz123asd123rea";

在上面的字符串中,值123重复了三次,现在我们将看到如何替换第一次和最后一次出现的值" 123"具有自定义价值。

public static string ReplaceFirstOccurence(string originalValue, string occurenceValue, string newValue)
    {
        if (string.IsNullOrEmpty(originalValue))
            return string.Empty;
        if (string.IsNullOrEmpty(occurenceValue))
            return originalValue;
        if (string.IsNullOrEmpty(newValue))
            return originalValue;
        int startindex = originalValue.IndexOf(occurenceValue);
        return originalValue.Remove(startindex, occurenceValue.Length).Insert(startindex, newValue);
    }


    public static string ReplaceLastOccurence(string originalValue, string occurenceValue, string newValue)
    {
        if (string.IsNullOrEmpty(originalValue))
            return string.Empty;
        if (string.IsNullOrEmpty(occurenceValue))
            return originalValue;
        if (string.IsNullOrEmpty(newValue))
            return originalValue;
        int startindex = originalValue.LastIndexOf(occurenceValue);
        return originalValue.Remove(startindex, occurenceValue.Length).Insert(startindex, newValue);
    }

在上面的例子中,我们只是找到值的起始索引,删除这些值并插入新值。

希望它有所帮助......

答案 3 :(得分:0)

<块引用>

我只想用空替换最后一个 abc。

你差点就知道了,但正则表达式从左到右工作。如果您让解析器从右到左工作并处理任何后续文本,则可以在正则表达式中完成。

string myText  = "abc def ghi 123 abc def ghi 123 abc def";
string pattern = "(abc)(.*?)$";

Regex.Replace(myText, pattern, "$2", RegexOptions.RightToLeft);

正则表达式替换返回字符串 abc def ghi 123 abc def ghi 123 def

注意结果中有两个空格……您要求将 abc 替换为“空”;这就是它所做的。可以根据需要解决空间问题