2010-10-27 23 views
6

Tôi chắc chắn có một giải pháp đơn giản, nhưng tôi dường như thiếu nó.Regex C# problem

Tôi cần một regex để làm như sau:

asdf.txt;qwer phải phù hợp với asdf.txt

"as;df.txt";qwer phải phù hợp với as;df.txt

Như bạn thấy, tôi cần phải khớp với dấu chấm phẩy, nhưng nếu dấu ngoặc kép tồn tại (khi có dấu chấm phẩy trong giá trị), tôi cần phải khớp trong dấu ngoặc kép. Vì tôi đang tìm kiếm tên tệp, sẽ không bao giờ có báo giá trong giá trị.

Hương vị regex của tôi là C#.

Cảm ơn sự giúp đỡ của bạn!

+0

Bạn có thể đã thoát khỏi dấu ngoặc kép (như \" hoặc '') bên trong dấu ngoặc kép? –

Trả lời

2
"[^"]+"(?=;)|[^;]+(?=;) 

này phù hợp với văn bản trong dấu ngoặc kép theo sau bởi một dấu chấm phẩy HOẶC văn bản tiếp theo là một dấu chấm phẩy. Dấu chấm phẩy KHÔNG được bao gồm trong trận đấu.

EDIT: nhận ra nỗ lực đầu tiên của tôi sẽ khớp với dấu ngoặc kép. Biểu thức sau sẽ loại trừ các dấu ngoặc kép, nhưng sử dụng các biểu thức con.

"([^"]+)";|([^;]+); 
+0

Tôi đã Nó được gọi là gì và những gì hương vị hỗ trợ nó? –

+1

Nó là 'nhìn phía trước bằng'. Nó được hỗ trợ bởi ít nhất là .NET và JavaScript. Trang web yêu thích của tôi để kiểm tra các biểu thức chính quy là http: // www .regexlib.com/RETester.aspx Nó hỗ trợ nhiều công cụ, bao gồm JavaScript và .NET –

+1

Bạn đã cho tôi đi đúng đường, đây là regex mà tôi chọn '(? <=")? [^ "] + (? = "?;)' –

0

Bạn cần phải sử dụng regex, bạn chỉ có thể sử dụng phương pháp C# chuỗi chứa:

string s = "asdf.txt;qwer"; 
string s1 = "\"as;df.txt\";qwer"; 

return s.Contains("asdf.txt"); //returns true 
return s1.Contains("\"as;df.txt\""); //returns true 
0

Nếu bạn đang tìm kiếm hai chuỗi rõ ràng asdf.txt và như; df.txt này có thể sau đó chỉ cần là hai eexions regex của bạn. Vì vậy, một cái gì đó như sau.

Matches matches = Regex.Matches('asdf.txt;qwer',"asdf.txt"); 

Matches matches = Regex.Matches('"as;df.txt";qwer',"as;df.txt"); 

Thưởng thức!

+0

họ không phải là những chuỗi cụ thể. Họ có thể là bất kỳ tên tệp hợp lệ –

1

này nên làm bạn:

(".*"|.*); 

Nó về mặt kỹ thuật phù hợp với dấu chấm phẩy là tốt, nhưng bạn có thể chặt mà tắt hoặc chỉ cần sử dụng backreference (nếu C# hỗ trợ backreferences)

1

này sẽ phù hợp đến số ; nếu không có dấu ngoặc kép hoặc văn bản được trích dẫn, sau đó là ; nếu có dấu ngoặc kép.

("[^"]+";|[^;]+;) 
+0

trận đấu này sẽ bao gồm các dấu chấm phẩy. –