Sử dụng C#, tôi có một chuỗi là tập lệnh SQL chứa nhiều truy vấn. Tôi muốn loại bỏ các phần của chuỗi được kèm theo trong dấu nháy đơn. Tôi có thể làm điều này bằng Regex.Replace
, theo cách này:Làm thế nào để loại bỏ chỉ một số chất nền từ một chuỗi?
string test = "Only 'together' can we turn him to the 'dark side' of the Force";
test = Regex.Replace(test, "'[^']*'", string.Empty);
Kết quả trong: "Chỉ có chúng ta có thể biến anh ta đến của Force"
Những gì tôi muốn làm là loại bỏ các chuỗi con giữa dấu ngoặc kép EXCEPT cho các đoạn có chứa một chuỗi con cụ thể. Ví dụ: sử dụng chuỗi ở trên, tôi muốn xóa các phần tử được trích dẫn ngoại trừ các đoạn có chứa "tối", sao cho chuỗi kết quả là:
Kết quả trong: "Chỉ chúng ta có thể biến anh ta thành 'tối side 'of the Force'
Làm cách nào để thực hiện điều này bằng cách sử dụng Regex.Replace
hoặc có thể bằng một số kỹ thuật khác? Tôi hiện đang thử một giải pháp có liên quan đến việc sử dụng Substring()
, IndexOf()
và Contains()
.
Lưu ý: Tôi không quan tâm liệu dấu nháy đơn xung quanh "mặt tối" có bị xóa hay không, do đó kết quả cũng có thể là: "Chỉ chúng ta mới có thể biến anh ta thành mặt tối của Lực lượng." Tôi nói điều này vì giải pháp sử dụng Split()
sẽ xóa tất cả các dấu nháy đơn.
Edit: Tôi không có một giải pháp được nêu sử dụng Substring()
, IndexOf()
, vv Bằng cách "làm việc trên:" Tôi có nghĩa là tôi đang nghĩ trong đầu tôi như thế nào điều này có thể được thực hiện. Tôi không có mã, đó là lý do tại sao tôi chưa đăng bất kỳ mã nào. Cảm ơn.
Chỉnh sửa: Giải pháp của VKS bên dưới hoạt động. Tôi đã không thoát khỏi \ b nỗ lực đầu tiên, đó là lý do tại sao nó thất bại. Ngoài ra, nó không hoạt động trừ khi tôi bao gồm các dấu nháy đơn xung quanh toàn bộ chuỗi.
test = Regex.Replace(test, "'(?![^']*\\bdark\\b)[^']*'", string.Empty);
@AndyKorneyev Điều gì khiến bạn nghĩ đây không phải là cách hay để đặt câu hỏi ở đây? Đây là một trong những bài viết đầu tiên hoàn chỉnh hơn tôi đã thấy trong một thời gian. Có một nỗ lực tốt, với regex, vấn đề được làm rõ, có một vài ý tưởng, tôi không thực sự thấy làm thế nào điều này có thể có thể tốt hơn, ít bao gồm cả câu trả lời thực tế. –
@AndyKorneyev Op của hai dòng mã của mình cho thấy nỗ lực của mình phải không? Ngoài ra câu hỏi được viết tốt và cho thấy nỗ lực nghiên cứu rất tốt. –
@SriramSakthivel rằng hai dòng không phải là về OP muốn. Đó là về một số "nhiệm vụ sơ bộ". Nhưng nỗ lực thực sự chỉ được mô tả là "* Tôi hiện đang thử một giải pháp liên quan đến việc sử dụng Substring(), IndexOf() và Contains(). *" Mà không hiển thị bất kỳ mã nào. –