2010-07-19 29 views
10

Nếu tôi có chuỗi như dưới đây ... biểu thức chính quy để xóa dấu ngoặc kép hàng đầu (tùy chọn) là gì? loại bỏ bất kỳ khoảng trắng không bắt buộc bên ngoài của dấu ngoặc kép:.C# Biểu thức chính quy: Xóa dấu ngoặc kép đầu và cuối (")

string input = "\"quoted string\"" -> quoted string 
string inputWithWhiteSpace = " \"quoted string\" " => quoted string 

(cho C# sử dụng Regex.Replace)

Trả lời

3

Thay ^\s*"?|"?\s*$ với một chuỗi rỗng

trong C#, regex sẽ là:

string input = " \"quoted string\" "l 
string pattern = @"^\s*""?|""?\s*$"; 
Regex rgx = new Regex(pattern); 
string result = rgx.Replace(input, ""); 
Console.WriteLine(result); 
+0

'@"^\ s * \ "? | \"? \ S * $ "' không thể thực hiện được trong C#. Trong các chuỗi nguyên văn, hãy sử dụng '" '' thay cho '\" 'cho dấu ngoặc kép. Ngoài ra, bạn không cần phải tạo một thể hiện mới của Regex, chỉ cần sử dụng Regex.Replace –

+0

@Yuriy Cảm ơn, cập nhật – Amarghosh

1

tôi sẽ sử dụng phương pháp String.Trim thay vào đó, nhưng nếu bạn muốn regex, sử dụng cái này:

@"^(\s|")+|(\s|")+$" 
32

Nó quá mức cần thiết để sử dụng Regex.Replace cho việc này. Sử dụng Trim để thay thế.

string output = input.Trim(' ', '\t', '\n', '\v', '\f', '\r', '"'); 

Và nếu bạn chỉ muốn loại bỏ khoảng trắng đó là ngoài có dấu ngoặc kép, giữ lại bất kỳ đó là bên trong:

string output = input.Trim().Trim('"'); 
+0

Tôi biết nó không phải là quá thông thường, nhưng nếu chuỗi bên trong của bạn bắt đầu hoặc kết thúc bằng bất kỳ chuỗi nào trong số đó, bạn cũng sẽ cắt chúng. Ví dụ: 'Kích thước 8' 'hoặc' "Kích thước 8" "" '(nếu nó thoát khỏi dấu ngoặc kép) sẽ kết thúc 'Kích thước 8'. – Andrew

9

Bên cạnh đó sử dụng một biểu thức chính quy bạn chỉ có thể sử dụng String.Trim() - dễ dàng hơn để đọc, hiểu và duy trì.

var result = input.Trim('"', ' ', '\t'); 
1

Tôi đã tạo phiên bản được sửa đổi một chút của mẫu khác hoạt động khá tốt đối với tôi. Tôi hy vọng điều này sẽ giúp tách các tham số dòng lệnh thông thường và các tập hợp từ được trích dẫn kép hoạt động như một tham số.

String pattern = "(\"[^\"]*\"|[^\"\\s]+)(\\s+|$)"; 
+0

Sử dụng riêng của tôi: // Ăn đối số đầu tiên (vì đó là tên tập tin C#) argsLine = new Regex ("(\" [^ \ "] * \" | [^ \ "\\ s] +)"). Thay thế (argsLine, ""); Sử dụng cách tiếp cận regex tương tự. :-) – TarmoPikaro

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