我有一个这样的字符串:
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", " ");
它无法正常工作。我的代码有什么问题以及如何修复它?
答案 0 :(得分:3)
使用LastIndexOf
和Substring
等字符串方法可以查看以下代码以及此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 def
上textToRemove.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 替换为“空”;这就是它所做的。可以根据需要解决空间问题。