2017-02-23 32 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

相關問題