Câu hỏi này đã có câu trả lời ở đây:
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?
Helpex - Trao Đổi & Giúp Đỡ - là một trang web chia sẻ kiến thức và hỏi đáp dành cho các lĩnh vực ở mọi cấp độ và các chuyên gia trong các lĩnh vực liên quan. Chỉ mất một phút để đăng ký.
Tham gia cộng đồngCâu hỏi này đã có câu trả lời ở đây:
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?
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")
Regex tốt hơn một chút để xử lý các từ viết tắt chính xác:@"(\B[A-Z]+?(?=[A-Z][^A-Z])|\B[A-Z]+?(?=[^A-Z]))"
@AviadP: Bạn nên làm cho câu trả lời. Tôi muốn nâng cấp nó. Regex tuyệt vời.
– Tạ Ánh Tuyết 21:44:19 19/12/2014@AviadP. Thất bại cho các từ viết tắt, ví dụ "HTMLGuide"
→"H TML Guide"
Sửa đổi nhẹ để Regex.Replace("ThisIsMy1stCapsDelimitedString", "(\\B[A-Z0-9])", " $1")
chia trên các số quá.
Cái này thực sự hoạt động: (? <! ^) ([AZ] [az] | (? <= [Az]) [AZ]) Từ: codeproject.com/Articles/108996/ trộm
– Hoàng Quang Khải 19:04:38 31/01/2019Đâ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)
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/2015Giả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ô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/2016Bạ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"
);
Điều đó sẽ tạo ra "U_S_A_" (khoảng trắng được thay thế bằng dấu gạch dưới) từ "USA"? Đó là, nó sẽ nối một không gian dấu?
– Dương Hoàng Việt 21:56:16 26/04/2011Cách đơn giản nhất:
var res = Regex.Replace("FirstName", "([A-Z])", " $1").Trim();
/// <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
Điều này làm việc cho tôi :
– Lê Linh Trang 17:17:55 25/03/2019Regex.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.