Có thể viết hoa ký tự đầu tiên của mỗi từ bằng regex không?Làm cách nào để viết hoa ký tự đầu tiên của mỗi từ bằng cách sử dụng regex trong VB.NET?
Tôi sẽ sử dụng điều này trong VB.net (SSIS)
Có thể viết hoa ký tự đầu tiên của mỗi từ bằng regex không?Làm cách nào để viết hoa ký tự đầu tiên của mỗi từ bằng cách sử dụng regex trong VB.NET?
Tôi sẽ sử dụng điều này trong VB.net (SSIS)
EDIT: mã VB.NET thêm dưới đây
Dim input As String = "The quick brown fox jumps over the lazy dog"
Dim pattern As String = "\b(\w|['-])+\b"
' With lambda support:
Dim result As String = Regex.Replace(input, pattern, _
Function (m) m.Value(0).ToString().ToUpper() & m.Value.Substring(1))
Nếu bạn không thể sử dụng lambdas sau đó sử dụng một MatchEvaluator thay vào đó:
Dim evaluator As MatchEvaluator = AddressOf TitleCase
Dim result As String = Regex.Replace(input, pattern, evaluator)
Public Function TitleCase(ByVal m As Match) As String
Return m.Value(0).ToString().ToUpper() & m.Value.Substring(1)
End Function
Nó không thực sự là trường hợp tiêu đề theo định dạng MS Word, nhưng đủ gần.
string input = "The quick brown fox jumps over the lazy dog";
string pattern = @"\b(\w|['-])+\b";
string result = Regex.Replace(input, pattern,
m => m.Value[0].ToString().ToUpper() + m.Value.Substring(1));
này độc đáo đảm nhận một lời thư, như xâu sẽ không ném ra một lỗi trên một cái gì đó như "Một "trong đầu vào.
Trong trường hợp nào là lambdas không có sẵn trong VB.NET và/hoặc C# vui lòng? –
@MagnusSmith khi sử dụng các phiên bản không hỗ trợ chúng, cụ thể là C# 2.0 và VB.NET 8.0 (thường được kết hợp với Visual Studio 2005 và .NET 2.0). –
Giải thích downvote? –
Bạn có thể làm điều đó, tuy nhiên đây là một chức năng khá phổ biến trong hầu hết các ngôn ngữ lập trình. Ví dụ, hàm là ucwords ($ word) trong PHP.
Tôi chưa bao giờ sử dụng PHP, nhưng không nhớ phương thức này bằng các ngôn ngữ khác mà tôi đã sử dụng, mặc dù tôi có thể không nhận thấy nó. – Jeremy
Hãy xem Capitalize First Letter of Each Word và tại C# Uppercase Words in String, tôi đã đăng bằng hai ngôn ngữ, Perl và C#, vì bạn chưa chỉ định ngôn ngữ bạn đang sử dụng.
s/\b(\w+)\b/ucfirst($1)/ge
Tốt và dễ - 's/\ b (\ w +)/\ u $ 1/g' hoặc' s/\ b (\ w)/\ U \ 1/g' cho ngắn. Thật không may, câu hỏi bây giờ chỉ định VB.NET, vì vậy câu trả lời Perl này không còn liên quan ... – ephemient
Không có trong regex "tinh khiết", nhưng hầu hết các trường nền tảng cụ thể có một cách để làm điều đó:
Ví dụ, trong python:
import re
re.compile(r'\b\w').sub(lambda x: x.group(0).upper(), 'hello')
Trong trường hợp này, chúng tôi vượt qua một lambda có thể gọi đến phương thức sub() (chứ không phải là một chuỗi thay thế) sẽ trả về chuỗi kết hợp phía trên. Hầu hết các ngôn ngữ có một số ngôn ngữ tương đương, nơi bạn chuyển một cuộc gọi có thể gọi là 'thay thế'.
Trong VB.NET bạn có thể vượt qua 'thay thế' lambda của bạn như Function (x) x.Value(0).ToString().ToUpper()
.NET đã hỗ trợ sẵn cho việc này. Xem TextInfo.ToTitleCase để biết tài liệu.
Mã của tôi chứa một số phương pháp mở rộng cho C#. Tôi cho rằng VB.NET cũng có, nhưng tôi không biết VB.NET đủ để tự chuyển đổi chúng.
public static class StringExtensions {
public static string ToTitleCase(this string value) {
return value.ToTitleCase(CultureInfo.InvariantCulture);
}
public static string ToTitleCase(this string value, CultureInfo culture) {
return value.ToTitleCase(culture.TextInfo);
}
public static string ToTitleCase(this string value, TextInfo textInfo) {
return textInfo.ToTitleCase(value);
}
}
Tại sao không chỉ sử dụng sẵn có TextInfo.ToTitleCase() method đã có trong Khuôn khổ .NET?
string capitalized = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase("this string should be capitalized!");
Không biết về điều này. Có thể là một giải pháp tuyệt vời cho tôi. Cảm ơn! – Jeremy
Chỉ cần lưu ý nhanh ở đây. Để đảm bảo chữ cái đầu tiên của mỗi từ được viết hoa trước tiên bạn cần phải chuyển đổi chuỗi gốc thành chữ thường. Chuỗi gốc của tôi là tất cả các mũ và '.ToTitleCase' dường như không có hiệu lực. – QFDev
Dim s As String = "your string"
Dim s2 As String = StrConv(s, VbStrConv.ProperCase
MessageBox.Show(s2)
Sử dụng ProperCase
chức năng:
Dim Str As String = "the quick brown fox jumps over the lazy dog"
Dim NewStr As String = StrConv(Str, VbStrConv.ProperCase)
Làm điều này về sự kiện nhấn phím của hộp văn bản của bạn.
If e.KeyChar <> ChrW(Keys.Back) Then
If txtEname.Text = "" Then
e.KeyChar = UCase(e.KeyChar)
End If
End If
Bạn phải chỉ định ngôn ngữ lập trình hoặc yêu cầu câu trả lời độc lập về ngôn ngữ. –
@Jeremy: Tôi đã thêm VB.NET tương đương với câu trả lời của tôi –