2012-07-05 32 views
5

Dưới đây là các mô hình:giải nén chuỗi bắt đầu với và kết thúc với một cái gì đó trong C#

string str = 
    "+++++tom cruise 9:44AM something text here \r\n +++++mark taylor 9:21PM"; 

chỉ chuỗi bắt đầu với +++++ và kết thúc với AM hoặc PM nên được chọn. Regex.split hoặc mẫu truy vấn LINQ là gì?

+1

Chấp nhận một câu trả lời hoặc ít nhất thả một bình luận cho cho biết câu trả lời có hữu ích cho bạn hay không là – akhil

Trả lời

3

thử regex này:

@"[+]{5}[^\n]+[AP]M" 

var str = "+++++tom cruise 9:44AM something text here \r\n +++++mark taylor 9:21PM"; 
var match = Regex.Match(str, @"[+]{5}[^\n]+[AP]M").Captures[0]; 
match.Value.Dump(); 

Output:

+++++tom cruise 9:44AM 

hoặc :

@"[+]{5}\D+\d{1,2}:\d{1,2}[AP]M 

Tôi khuyên bạn nên sử dụng regex này. Nó sẽ phù hợp cho đến khi tìm thấy một giờ trên định dạng xY: xY: AM/PM trong đó Y là opcional. Kiểm tra ổ đĩa:

string str = "+++++tom cruise 9:44AM something text here \r\n +++++mark taylor 9:21PM"; 
foreach(Match match in Regex.Matches(str, @"[+]{5}\D+\d{1,2}:\d{1,2}[AP]M")) 
     Console.WriteLine(match.Value); 

Output:

+++++tom cruise 9:44AM 
+++++mark taylor 9:21PM 
+0

Phiên bản "được khuyến nghị" của bạn vẫn tham lam và có thể khớp nhiều mục cùng một lúc. –

+0

@BenVoigt: hum .. edited. –

2

Các regex sẽ là:

[+]{5}.*AM|[+]{5}.*PM 

Bạn có thể thử nó ở đây: http://regexpal.com/

Nó chụp đầu tiên là:

+++++tom cruise 9:44AM 

và thứ hai là

+++++mark taylor 9:21PM 
+1

Không phải là '. *' Tham lam? Điều đó sẽ không trả lại toàn bộ sự việc như một trận đấu lớn? –

+0

@BenVoigt Tôi không chắc chắn những gì C# Regex mặc định nhưng tôi tưởng tượng có một cách để làm cho '. *' Không tham lam. Nhưng nếu điều đó là không thể, tôi tin rằng việc thay thế '. *' Bằng '. +?' Sẽ khắc phục vấn đề. – Talon876

3

Talon gần như có nó, nhưng bạn cần một nắm bắt tối thiểu, không tham lam. Hãy thử

[+]{5}.*?(A|P)M 
+2

Tôi đã chơi nó xuống thành '\ + {5}. *? [AP] M' :) – Blorgbeard

+0

@Blorgbeard: Vâng, đó là một chút tốt hơn. Điều quan trọng là làm việc mặc dù. –

+0

thực sự, vì vậy tôi upvoted câu trả lời của bạn thay vì đăng cải tiến nhỏ của tôi: P – Blorgbeard

-1

Đây là mã regex chính xác mà tìm kiếm các chuỗi như bạn yêu cầu

string str = "+++++tom cruise 9:44AM something text here \r\n +++++mark taylor 9:21PM asdasd"; 
     var fileNames = from Match m in Regex.Matches(str, @"\++\++\++\++\++.+(PM|AM)") 
         select m.Value; 
     foreach (var s in fileNames) 
     { 
      Response.Write(s.ToString() + "\r\n"); 
     } 
+1

Không, không.Nó sẽ tìm thấy bất kỳ chuỗi dấu cộng, mà không yêu cầu một chuỗi 5. –

+0

@BenVoigt Điều đó không tính nó cho -1. Tôi đã chỉnh sửa regex. Tôi đoán nó tốt hơn bây giờ. – akhil

+0

Cảm ơn nó đã hoạt động ... Cảm ơn mọi người đã trả lời nhanh. – user1502952

0

sử dụng này:

bool bResult = false; 
String strInput = @"+++++tom cruise 9:44AM something text here \r\n +++++mark taylor 9:21PM"; 
foreach (string s in strInput.Split(new[]{'\r', '\n'}, StringSplitOptions.RemoveEmptyEntries)) 
{ 
    bResult |= Regex.IsMatch(s, @"^[+]+.+[AP]M$"); 
} 

hoặc để nhận kết quả sử dụng:

var listResult = new List<string>(); 
String strInput = @"+++++tom cruise 9:44AM something text here \r\n +++++mark taylor 9:21PM"; 
foreach (string s in strInput.Split(new[]{'\r', '\n'}, StringSplitOptions.RemoveEmptyEntries)) 
{ 
    listResult.Add(Regex.Match(s, @"^[+]+(?<result>.+)[AP]M$").Groups["result"].Value); 
} 
Các vấn đề liên quan