在C#中替换字符串

时间:2016-09-05 07:59:47

标签: string c#-4.0 replace substring console-application

我有一个字符串" productname-producttype-front-view.png "。我需要将其显示为" PRODUCTNAME-PRODUCTTYPE前视图"。

我已经走了这么多

string y = x.Replace(".png", " ").ToUpper();

现在,我被困了......请帮助。提前致谢

2 个答案:

答案 0 :(得分:1)

您可以使用Path.GetFileNameWithoutExtensionString.Split来提取令牌:

string fileName = "productname-producttype-front-view.png";
string fileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(fileName);
string[] tokens = fileNameWithoutExtension.Split('-');

现在,在LINQ和String.Join的帮助下,很容易获得理想的结果:

var newTokens = tokens.Select((s, index) => index >= 2 ? s : s.ToUpper());
string result = String.Join(" ", newTokens);  // puts a space between each token

答案 1 :(得分:1)

您可以使用以下基于正则表达式的方法:

var line = "productname-producttype-front-view.png";
var pattern = @"^(.*)-([^-]+-[^-]+)\.[^-.]+$";
var m = Regex.Match(line, pattern);
var result = string.Format("{0} {1}", m.Groups[1].Value.ToUpper(), 
    m.Groups[2].Value.Replace("-", " "));
Console.WriteLine(result);

请参阅C# demo

它的作用:

  • 将字符串解析为初始部分,将所有字符串解析为最后一个连字符,仅捕获-之间的初始部分和2个子部分(不捕获将被删除的扩展名)
  • 初始部分(第1组)只是大写的,而尾随部分则将所有-变成空格。

模式说明

  • ^ - 字符串开始
  • (.*) - 第1组捕获除换行符之外的任何0+个字符(但产生与下一个子模式匹配的字符串的一部分)
  • - - 连字符
  • ([^-]+-[^-]+) - 第2组捕获除-以外的1个字符,然后是-,并再次捕获除-以外的1个字符
  • \.[^-.]+ - 除.-
  • 以外的1个字符后跟一个点
  • $ - 字符串结束。