Tôi muốn để định dạng một chuỗi trông như thế nàyĐịnh dạng chuỗi với regex trong C#
BPT4SH9R0XJ6
Into cái gì đó trông như thế này
BPT4-SH9R-0XJ6
Chuỗi sẽ luôn là một kết hợp của 12 chữ và số
Bất cứ lời khuyên sẽ được đánh giá cao, nhờ
Tôi muốn để định dạng một chuỗi trông như thế nàyĐịnh dạng chuỗi với regex trong C#
BPT4SH9R0XJ6
Into cái gì đó trông như thế này
BPT4-SH9R-0XJ6
Chuỗi sẽ luôn là một kết hợp của 12 chữ và số
Bất cứ lời khuyên sẽ được đánh giá cao, nhờ
Hãy thử Regex.Replace(input, @"(\w{4})(\w{4})(\w{4})", @"$1-$2-$3");
Regex thường chế giễu, nhưng là một cách khá gọn gàng làm những gì bạn cần. Có thể được mở rộng đến các yêu cầu phức tạp hơn mà khó đáp ứng bằng cách sử dụng các phương thức chuỗi.
Thats chính xác những gì tôi đang tìm kiếm, tôi biết điều này có thể được thực hiện với chất nền vv nhưng chuỗi nối thường phức tạp và không phải là rất thú vị để viết hoặc :) –
là có một cách để nói $ 1.toLower() hoặc tương tự? – Zanidd
@Zanidd Có, có một [overload of Replace()] (https://docs.microsoft.com/en-us/dotnet/api/system.text.regularexpressions.regex.replace?view=netframework-4.7.1 #System_Text_RegularExpressions_Regex_Replace_System_String_System_String_System_Text_RegularExpressions_MatchEvaluator_) cho phép bạn sử dụng chức năng tùy chỉnh để tạo chuỗi thay thế. – Olly
Bạn có thể sử dụng "(.{4})(.{4})(.{4})"
làm biểu hiện của bạn và "$1-$2-$3"
làm hình thức thay thế của bạn. Đây là, tuy nhiên, hầu như không sử dụng tốt cho regexp: bạn có thể làm điều đó dễ dàng hơn nhiều với Substring
.
var res = s.Substring(0,4)+"-"+s.Substring(4,4)+"-"+s.Substring(8);
Nó có vẻ như một sự kết hợp của String.Concat
và string.Substring
nên chăm sóc của tất cả mọi thứ mà bạn cần.
Nếu quy tắc là phải luôn luôn chia làm ba khối bốn nhân vật không cần thiết cho một exp reg:
str.Substring(0,4) + "-" + str.Substring(4,4) + "-" + str.Substring(8,4)
Whops - thanks @dasblinkenlight – MiMo
var str = "BPT4SH9R0XJ6";
var newStr = str.Substring(0, 4) + "-" + str.Substring(4, 4) + "-" + str.Substring(8, 4);
Bất kỳ lý do nào bạn muốn thực hiện regex? bạn chỉ có thể chèn dấu gạch nối:
string s = "BPT4SH9R0XJ6";
for(int i = 4; i < s.length; i = i+5)
s = s.Insert(i, "-");
Điều này sẽ tiếp tục thêm dấu gạch nối mỗi 4 ký tự, sẽ không bị lỗi nếu chuỗi quá ngắn/dài/v.v.
Bạn có chắc là mã đúng không? Bạn không sử dụng biến i. Ngoài ra nó không phải là rất hiệu quả vì nó tạo ra đối tượng chuỗi mới trong mỗi lần lặp. –
@tomp, bạn nói đúng, tôi đặt 1 thay vì tôi – naspinski
return original_string.SubString(0,4)+"-"+original_string.SubString(4,4)+"-"+original_string.SubString(8,4);
Đã kết thúc upp sử dụng này
var original = "BPT4SH9R0XJ6".ToCharArray();
var first = new string(original, 0, 4);
var second = new string(original, 4, 4);
var third = new string(original, 8, 4);
var mystring = string.Concat(first, "-", second, "-", third);
Cảm ơn
string str = @"BPT4SH9R0XJ6";
string formattedString = string.Format("{0}-{1}-{2}", str.Substring(0, 4), str.Substring(4,4), str.Substring(8,4));
Nếu bạn được đảm bảo nội dung bạn đang hoạt động trên là mã 12 nhân vật thì tại sao bạn không chỉ cần sử dụng chuỗi con? Tại sao bạn cần Regex?
String theString = "AB12CD34EF56";
String theNewString = theString.Substring(0, 4) + "-" + theString.Substring(4, 4) + "-" + theString.Substring(8, 4);'
này làm việc với bất kỳ khoảng thời chuỗi:
for (int i = 0; i < (int)Math.Floor((myString.Length - 1)/4d); i++)
{
myString = myString.Insert((i + 1) * 4 + i, "-");
}
Có một lý do bạn cần phải sử dụng một regex? – Justin
Không thực sự, chỉ cần tìm đó là những gì thường được đề nghị –
^^ đồng ý với @Justin. Điều này trông giống như một chuỗi con đơn giản. –