字符串:替换字符串中的最后一个“.something”?

时间:2012-07-25 13:24:01

标签: c# .net regex

我有一些字符串,我想用新字符串替换最后一个.something。例如:

string replace = ".new";
blabla.test.bla.text.jpeg => blabla.test.bla.text.new
testfile_this.00001...csv => testfile_this.00001...new

所以.....有多少.并不重要,我只想更改最后一个{&1}}之后的字符串。

我在C#中看到 Path.ChangeExtension ,但它只能与文件结合使用 - 是否只能使用字符串?我真的需要正则表达式吗?

6 个答案:

答案 0 :(得分:4)

您可以使用string.LastIndexOf('.');

string replace = ".new"; 
string test = "blabla.test.bla.text.jpeg";
int pos = test.LastIndexOf('.');
if(pos >= 0)
    string newString = test.Substring(0, pos-1) + replace;

当然需要进行一些检查以确保LastIndexOf找到最终点。

然而,看到其他答案,让我说,虽然Path.ChangeExtension有效,但我觉得对我感觉不适合使用依赖于操作系统的文件处理类的方法来操作一个字符串。 (当然,如果这个字符串真的是文件名,那么我的反对意见无效)

答案 1 :(得分:4)

string replace = ".new";
string p = "blabla.test.bla.text.jpeg";
Console.WriteLine(Path.GetFileNameWithoutExtension(p) + replace);

<强>输出:

blabla.test.bla.text.new

答案 2 :(得分:4)

ChangeExtension应按照宣传的方式运作;

string replace = ".new";
string file = "testfile_this.00001...csv";

file = Path.ChangeExtension(file, replace);

>> testfile_this.00001...new

答案 3 :(得分:1)

string s = "blabla.test.bla.text.jpeg";
s = s.Substring(0, s.LastIndexOf(".")) + replace;

答案 4 :(得分:1)

不,你不需要正则表达式。只需.LastIndexOf和.Substring即可。

string replace = ".new";
string input = "blabla.bla.test.jpg";

string output = input.Substring(0, input.LastIndexOf('.')) + replace;
// output = "blabla.bla.test.new"

答案 5 :(得分:0)

请使用此功能。

public string ReplaceStirng(string originalSting, string replacedString)
{
    try
    {
        List<string> subString = originalSting.Split('.').ToList();
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < subString.Count - 1; i++)
        {
            stringBuilder.Append(subString[i]);
        }
        stringBuilder.Append(replacedString);
        return stringBuilder.ToString();
    }
    catch (Exception ex)
    {
        if (log.IsErrorEnabled)
            log.Error("[" + System.DateTime.Now.ToString() + "] " + System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName + " :: " + System.Reflection.MethodBase.GetCurrentMethod().Name + " :: ", ex);
            throw;
    }
}