簡體   English   中英

C# - 用下划線和字母替換每個UpperCase字母

[英]C# - Replace Every UpperCase Letter with Underscore and the Letter

如何用下划線和C#中的字母替換每個UpperCase字母? 注意:除非該字符已經由下划線繼續。

更新:例如,MikeJones
會變成
Mike_Jones

但Mike_Jones
不會變成
Mike__Jones

Regex是最好的方法嗎? 我從哪里開始這個?

正則表達式聽起來最好:

string input = "Test_StringForYou";
string replaced = Regex.Replace(input, @"(?<!_)([A-Z])", "_$1");
Console.WriteLine(replaced);

輸出:_Test_String_For_You

一定要添加一個using System.Text.RegularExpressions;

所以,你不想改變字母的大小寫! 我知道你沒有說你做過,但我們有些人認為這是因為這個問題經常出現。 在這種情況下,這個正則表達式就是你所需要的:

s = Regex.Replace(s, @"(?<=[a-z])([A-Z])", @"_$1");

對小寫字母執行正向lookbehind還可確保您不在字符串的開頭添加下划線。

Regex.Replace(subject, "([A-Z])", "_$1");

將Quick Brown Fox改為_TheQuick _Brown _Fox

這就是你需要的嗎?

如果你想改變這個:

示范文本

_示范文本

然后不,RegEx不會嚴格執行此操作,因為您無法轉換替換表達式中的捕獲或組。 當然,您可以使用Jake的答案並在末尾添加.ToLower()調用,這將用小寫字母替換所有大寫字母。

如果您要做的只是在每個沒有大寫字母的大寫字母前面加下一個下划線,那么Jake的答案應該可以解決問題。

using System.Text.RegularExpressions;

//-----------------------------------------------------------------

string str = Regex.Replace("MyString", @"([A-Z])", " $1").Trim();

//-----------------------------------------------------------------

str givs "My String"

它工作得很好

不知道這是否仍然相關,但這是一個簡單的方法。

private string StripInput(string input)
    {
        var output = input
            .Replace(" ", "_")
            .ToLower().Trim();
        return output;
    }

string TEST = "Hello World";
    litTest.Text = StripInput(TEST);

將出現:hello_world

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM