2011-12-28 39 views
5

ví dụ chúng ta có chuỗi này:Định dạng chuỗi con để nhận tất cả ký tự sau dấu gạch dưới đầu tiên nhưng trước dấu gạch dưới thứ 2?

  • hello_my name_is_bob

và muốn nhận được chỉ là "Tên của tôi" phần của chuỗi, làm thế nào tôi có thể có được điều này chỉ đơn giản với chuỗi?

Ngoài ra, định dạng trong ví dụ sẽ luôn giống nhau vì vậy tôi chỉ cần truy xuất nội dung sau dấu gạch dưới đầu tiên nhưng trước dấu gạch dưới thứ 2.

Trả lời

14

string.Split sẽ làm cho điều này, không cần phải đi vào Substring:

var parts = "hello_my name_is_bob".Split('_'); 

string name = parts[1] // == "my name"; 

Hoặc, trong một liner (mặc dù tôi tìm thấy điều này ít có thể đọc được):

string name = "hello_my name_is_bob".Split('_')[1]; 
+0

Công cụ tốt, lúc đầu tôi đã sử dụng dấu ngoặc kép nhưng nó đã cho tôi một ngoại lệ vì vậy tôi đã thay đổi nó thành dấu nháy đơn và nó hoạt động như một nhà vô địch. – MDL

+0

@MDL - Dấu ngoặc kép trong chuỗi phân tách C#, dấu nháy đơn phân định các ký tự. – Oded

1

Nếu bạn biết chắc chắn rằng bạn có hai dấu gạch dưới, sử dụng mã này:

var pos = str.IndexOf('_'); 
var last = str.IndexOf('_', pos+1); 
var res = str.Substring(pos+1, last-pos-1); 

Điều này sẽ fai l nếu số lượng dấu gạch dưới nhỏ hơn hai.

2
"hello_my name_is_bob".Split('_').Skip(1).First(); 
Các vấn đề liên quan