Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String C语言中字符串的替换#_String_C# 4.0_Replace_Substring_Console Application - Fatal编程技术网

String C语言中字符串的替换#

String C语言中字符串的替换#,string,c#-4.0,replace,substring,console-application,String,C# 4.0,Replace,Substring,Console Application,我有一个字符串“productname producttype front view.png”。我需要将其显示为“PRODUCTNAME-PRODUCTTYPE前视图”” 我已经做了这么多了 string y = x.Replace(".png", " ").ToUpper(); 现在,我被困住了…请帮助我。提前感谢您可以使用Path.GetFileNameWithoutExtension和String.Split提取令牌: string fileName = "productname-pro

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

我已经做了这么多了

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

现在,我被困住了…请帮助我。提前感谢

您可以使用
Path.GetFileNameWithoutExtension
String.Split
提取令牌:

string fileName = "productname-producttype-front-view.png";
string fileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(fileName);
string[] tokens = fileNameWithoutExtension.Split('-');
现在,在LINQ和
字符串的帮助下,很容易获得所需的结果。Join

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

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

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);

它的作用是:

  • 将字符串解析为初始部分以及除1个连字符外的最后一个部分之后的所有内容,仅捕获初始部分和
    -
    之间的2个子部分(不捕获将删除的扩展名)
  • 开头部分(第1组)仅大写,而后面部分将所有
    -
    转换为空格
图案说明

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

实际上,规则是什么?将前两项或后两项改为大写?“PRODUCTNAME”和“PRODUCTTYPE”将以大写字母加“-”表示。我发现您的答案对+1很有帮助,特别是对于详细的模式解释