88

Có một chức năng tốt để biến một cái gì đó như

Tên đầu tiên

đến đây:

Tên đầu tiên?

|
  • Điều này làm việc cho tôi : Regex.Replace(s, "([A-Z0-9]+)", " $1").Trim(). Và nếu bạn muốn tách trên mỗi chữ in hoa, chỉ cần xóa dấu cộng.

    – Lê Linh Trang 17:17:55 25/03/2019
150

Xem: .NET - Làm thế nào bạn có thể chia một chuỗi giới hạn "mũ" thành một mảng?

Đặc biệt:

Regex.Replace("ThisIsMyCapsDelimitedString", "(\\B[A-Z])", " $1")
|
105

Đây là một phương thức mở rộng mà tôi đã sử dụng rộng rãi cho loại điều này

public static string SplitCamelCase( this string str )
{
    return Regex.Replace( 
        Regex.Replace( 
            str, 
            @"(\P{Ll})(\P{Ll}\p{Ll})", 
            "$1 $2" 
        ), 
        @"(\p{Ll})(\P{Ll})", 
        "$1 $2" 
    );
}

Nó cũng xử lý các chuỗi như "IBMMakeStuffAndSellIt", chuyển đổi nó thành "IBM Make Stuff And Sell It" (IIRC)

|
  • 1

    Cảm ơn điều này hoạt động tốt!

    – Dương Hoàng Việt 14:42:44 10/10/2013
  • 1

    Cảm ơn bạn, làm việc tuyệt vời! Tôi chỉ muốn thêm điều đó, tôi tin rằng sẽ nhanh hơn nhiều nếu đối tượng Regex được tạo tĩnh bằng tùy chọn Biên dịch thay vì sử dụng phương thức Regex.Replace tĩnh.

    – Tạ Ánh Tuyết 22:58:22 05/08/2015
  • 1

    Giải thích cú pháp: {Ll}là Danh mục ký tự Unicode "Chữ thường" (trái ngược với {Lu}"Chữ hoa"). 'P' là kết quả trùng khớp âm, trong khi 'p' là kết quả trùng khớp, do đó, theo \P{Ll}nghĩa đen là "Không phải chữ thường" và p{Ll}là "Chữ thường". Vì vậy, regex này phân chia trên hai mẫu. 1: "Uppercase, Uppercase, Lowercase" (sẽ khớp với 'MMa' trong 'IBMMake' và kết quả là 'IBM Make') và 2. "Lowercase, Uppercase" (khớp với 'eS' trong 'MakeStuff '). Điều đó bao gồm tất cả các điểm dừng trường hợp lạc đà. MIPO: Thay thế không gian bằng dấu gạch nối và gọi ToLowerđể tạo tên thuộc tính dữ liệu html5.

    – Tạ Hoài An 03:07:39 08/09/2015
  • 1

    Tôi thích điều này nhiều hơn câu trả lời được chấp nhận vì nó không tạo ra "IBM Make Stuff And Sell it"

    – Ngô Ái Vân 15:05:50 21/12/2016
  • 1

    Có bất kỳ vấn đề với việc sử dụng \p{Lu}thay vì \P{Ll}?

    – Hoàng Quang Khải 17:16:10 05/07/2017
7

Bạn có thể sử dụng một biểu thức thông thường:

Match    ([^^])([A-Z])
Replace  $1 $2

Trong mã:

String output = System.Text.RegularExpressions.Regex.Replace(
                  input,
                  "([^^])([A-Z])",
                  "$1 $2"
                );
|
6

Cách đơn giản nhất:

var res = Regex.Replace("FirstName", "([A-Z])", " $1").Trim();
|
3
    /// <summary>
    /// Parse the input string by placing a space between character case changes in the string
    /// </summary>
    /// <param name="strInput">The string to parse</param>
    /// <returns>The altered string</returns>
    public static string ParseByCase(string strInput)
    {
        // The altered string (with spaces between the case changes)
        string strOutput = "";

        // The index of the current character in the input string
        int intCurrentCharPos = 0;

        // The index of the last character in the input string
        int intLastCharPos = strInput.Length - 1;

        // for every character in the input string
        for (intCurrentCharPos = 0; intCurrentCharPos <= intLastCharPos; intCurrentCharPos++)
        {
            // Get the current character from the input string
            char chrCurrentInputChar = strInput[intCurrentCharPos];

            // At first, set previous character to the current character in the input string
            char chrPreviousInputChar = chrCurrentInputChar;

            // If this is not the first character in the input string
            if (intCurrentCharPos > 0)
            {
                // Get the previous character from the input string
                chrPreviousInputChar = strInput[intCurrentCharPos - 1];

            } // end if

            // Put a space before each upper case character if the previous character is lower case
            if (char.IsUpper(chrCurrentInputChar) == true && char.IsLower(chrPreviousInputChar) == true)
            {   
                // Add a space to the output string
                strOutput += " ";

            } // end if

            // Add the character from the input string to the output string
            strOutput += chrCurrentInputChar;

        } // next

        // Return the altered string
        return strOutput;

    } // end method
|

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.