2010-01-11 39 views
5

Câu hỏi nhanh. Tôi có một hộp danh sách được điền từ danh sách thư mục. Mỗi tập tin chứa tên của nó và ~ #####. Tôi đang cố gắng để đọc tất cả vào một chuỗi và thay thế ~ #### với không có gì. CáC#### có thể là các chữ số từ chiều dài 1-6 và có thể là bất cứ thứ gì từ 0-9. Dưới đây là đoạn code tôi đang sử dụng:Câu hỏi thay thế chuỗi C#

string listItem = (listBox1.SelectedItem.ToString().Replace("~*","")); 

Ví dụ:

Here223~123 ---> Here 
Here224~2321 ----> Here 

tôi không thể thay thế bất kỳ số bởi vì tôi cần những con số trước ~

Trả lời

4

gì về:

string listItem = 
     listBox1.SelectedItem.ToString().Substring(0, 
      listBox1.SelectedItem.ToString().IndexOf("~")); 
+0

Người đàn ông, tôi chủ yếu bỏ phiếu để giúp bạn nhận được từ 9,990 đến 10k. Nhưng bạn dường như đã đạt đến giới hạn cho ngày hôm nay rồi. :-) – Tomalak

+0

@Tomalak, tôi đã tạo 232 điểm ngay hôm nay; thật khó để có được câu trả lời được chấp nhận khi bạn cần một =) –

12

các Cố

listItem.Split("~")[0] 

Điều này sẽ cung cấp cho bạn chuỗi đầu tiên trong một chuỗi các chuỗi, theo cách đó bạn đã mất tilda và chuỗi sau đó.

6

string listItem = Regex.Replace(listBox1.SelectedItem.ToString(), "~[0-9]{1,6}", string.Empty);

nên làm các trick (không thể nhớ nếu bạn có để thoát khỏi ~ mặc dù!)

+0

tôi rất thích làm regex, nhưng tôi không thể có được nó để biên dịch. nó nghĩ rằng có một dòng mới bắt đầu từ " –

+0

đó là lẻ, Regex thường khá tốt với newlines ('\ n's). Regex cũng là một công cụ tuyệt vời trong kho vũ khí của bạn cho các vấn đề như thế này, đặc biệt là khi họ nhận được phức tạp hơn, như Split không hoàn toàn cụ thể. –

+0

@ Giống như vậy, chỉ là một thiếu '" '; hãy thử lại lần nữa –

4

Bạn có thể tốt hơn của việc sử dụng xâu (phương pháp int startIndex, int lenght):

string listItem = listBox1.SelectedItem.toString(); 
listItem = listitem.SubString(0, listItem.IndexOf("~")); 
1

Vấn đề là String.Replace không làm biểu thức thông thường

do đó, hoặc chia trên "~", hoặc sử dụng regex