2012-05-05 39 views
5

Trong dự án hiện tại của tôi, tôi phải làm việc rất nhiều với chuỗi con và tôi tự hỏi liệu có cách nào dễ dàng hơn để lấy ra các số từ chuỗi không.Lấy các số cụ thể từ chuỗi

Ví dụ: Tôi có một chuỗi như thế này: 12 văn bản text 7 văn bản

Tôi muốn trở thành có sẵn để có được ra số đầu tiên thiết lập hoặc số thứ hai được thiết lập. Vì vậy, nếu tôi yêu cầu thiết lập số 1, tôi sẽ nhận được 12 và nếu tôi yêu cầu số 2, tôi sẽ nhận được 7 số.

Cảm ơn!

Trả lời

7

này sẽ tạo ra một mảng các số nguyên từ chuỗi:

using System.Linq; 
using System.Text.RegularExpressions; 

class Program { 
    static void Main() { 
     string text = "12 text text 7 text"; 
     int[] numbers = (from Match m in Regex.Matches(text, @"\d+") select int.Parse(m.Value)).ToArray(); 
    } 
} 
+0

Cảm ơn, chỉ là những gì tôi cần! : D Btw xin lỗi vì bỏ phiếu xuống, không biết tôi không thể bỏ phiếu vì tôi mới được đăng ký. –

+0

@TobiasLindberg: vui vì nó đã giúp, trong trường hợp đó bạn có thể hoàn tác bỏ phiếu xuống :)? –

+0

Xin lỗi nó chỉ là một điều phía khách hàng, Nó đã không thực sự bỏ phiếu bạn. Cảm ơn một lần nữa! –

1

Có vẻ như một kết quả phù hợp cho Regex.

Biểu thức chính quy cơ bản sẽ là \d+ để khớp với (một hoặc nhiều chữ số).

Bạn sẽ lặp qua bộ sưu tập Matches được trả về từ Regex.Matches và phân tích từng đối sánh được trả về lần lượt.

var matches = Regex.Matches(input, "\d+"); 

foreach(var match in matches) 
{ 
    myIntList.Add(int.Parse(match.Value)); 
} 
1

Hãy thử sử dụng cụm từ thông dụng, bạn có thể đối sánh [0-9]+ sẽ khớp với bất kỳ lần chạy các chữ số nào trong chuỗi của bạn. Mã C# để sử dụng regex này xấp xỉ như sau:

Match match = Regex.Match(input, "[0-9]+", RegexOptions.IgnoreCase); 

// Here we check the Match instance. 
if (match.Success) 
{ 
    // here you get the first match 
    string value = match.Groups[1].Value; 
} 

Tất nhiên, bạn sẽ phải phân tích cú pháp chuỗi trả về.

0

Bạn có thể sử dụng regex:

Regex regex = new Regex(@"^[0-9]+$"); 
+0

Bạn giả định rằng không cho phép '0'. – Oded

0

bạn có thể chia nhỏ các chuỗi trong các bộ phận sử dụng String.split, và sau đó travese sự danh sách với một foreach áp dụng int.TryParse, một cái gì đó như thế này:

string test = "12 text text 7 text"; 
var numbers = new List<int>(); 
int i; 
foreach (string s in test.Split(' ')) 
{ 
    if (int.TryParse(s, out i)) numbers.Add(i); 
} 

Số bây giờ có danh sách các giá trị hợp lệ

+0

hi Rất tiếc, cảm ơn bạn đã nắm bắt. Như đã đề cập trong câu đầu tiên, nó phải là TryParse. Tôi đã sửa chữa nó. –

Các vấn đề liên quan