2017-02-23 96 views
-1

考虑下面的辅助方法使前3个字符为大写使用正则表达式

public static string ToSentenceCase(this string str) 
{ 
    return Regex.Replace(str, "[a-z][A-Z]", m => m.Value[0] + " " + char.ToLower(m.Value[1])); 
} 

现在,当被称为:

static void Main(string[] args) 
{ 
    string a = "HelloWorld"; 
    Console.WriteLine(CultureInfo.CurrentCulture.TextInfo.ToTitleCase(a.ToSentenceCase())); 
} 

这将输出的Hello World伟大的工程。

使用此方法,我试图将3个第一个字符改为大写,如果他们以字符串RMA开头。有没有办法实现这个使用正则表达式,或者我必须创建另一个方法,并调用它,一旦我有我从ToSentenceCase()返回的字符串?

所以,如果我有一个字符串rmainfo我想RMA信息

+1

只是与RMA? –

+0

@ThomasAyoub它基本上是一个MVC应用程序,我做面包。因此,我将拥有控制器名称,然后是操作名称,如** Home> Create **或** Home> Rma Info **,这是我希望** Rma **为** RMA **的地方** – Code

回答

1

您可以使用:

public static string ToSentenceCase(this string str) 
{ 
    var temp = Regex.Replace(str, "[a-z][A-Z]", m => m.Value[0] + " " + char.ToLower(m.Value[1])); 

    return Regex.Replace(temp, "^rma.", m => m.Value.Substring(0, 3).ToUpper() + " " + char.ToUpper(m.Value[3]), RegexOptions.IgnoreCase); 
} 
+0

谢谢你,这将涵盖在串中没有'rma'的情况吗? – Code

+2

该方法的问题是它将取代任何发生,而不仅仅是前三个字符的位置。 – PaulF

+0

我试过这个,它不会改变任何东西 – Code

0

如果你坚持用正则表达式做,这可能是工作:

var str = "rmaHelloWorld"; 
var str1 = Regex.Replace(str, "[a-z][A-Z]", m => m.Value[0] + " " + char.ToLower(m.Value[1])); 
var str2 = Regex.Replace(str1, "^rma", m => m.Value.ToUpper()); 
Console.WriteLine(str2); 
+0

谢谢你,但有时字符串不会包含字符** rma **,所以这可能不起作用 – Code

+0

在这种情况下,第二个'Replace'将不会执行任何操作 – fguchelaar

+0

由于第一个正则表达式在小写和大写字符之间插入一个空格&代码似乎希望保留大写字符(HelloWorld => Hello World),不需要char.ToLower。如果你使用“rmainfo”作为输入,那么你会得到“RMAinfo”而不是“RMA Info” - 所以没有按要求完全工作。 – PaulF

相关问题