Tìm và thay thế - Thêm lợi nhuận vận chuyển HOẶC Newline


183

Trong trường hợp chuỗi sau được phân tích cú pháp.

ford mustang,10,blue~~?bugatti veyron,13,black

Tôi muốn thay thế ~~?bằng mộtcarriage return

Thay thế bằng \nchỉ thêm chuỗi"\n"

Điều này có thể giải quyết như thế nào?

Câu trả lời:


272

Đảm bảo "Sử dụng: Biểu thức chính quy" được chọn trong hộp thoại Tìm và thay thế:

Tìm / Thay thế hộp thoại Sử dụng biểu thức thông thường

Lưu ý rằng đối với Visual Studio 2010, tính năng này không hoạt động trong tiện ích mở rộng "Tìm nhanh" của Công cụ năng suất Visual Studio (kể từ bản cập nhật tháng 7 năm 2011); thay vào đó, bạn sẽ cần sử dụng hộp thoại Tìm và Thay thế đầy đủ (sử dụng Ctrl + Shift + H hoặc Chỉnh sửa -> Tìm và Thay thế -> Thay thế trong Tệp) và thay đổi phạm vi thành "Tài liệu hiện tại".


5
sử dụng nút "Phát" ở bên phải văn bản Tìm cũng rất tiện lợi
Cel

3
và nếu bạn đang cố gắng khớp các ký tự đặc biệt như dấu ngoặc đơn, đừng quên sử dụng, ví dụ như \)khi các biểu thức thông thường được bật ...
Cel

2
Nhân ?vật cần được thoát trong Regex vì nó biểu thị rằng phần tử trước đó là tùy chọn. Do đó, văn bản "Tìm gì" chính xác ~~\?, với dấu chấm hỏi được thoát bằng dấu gạch chéo ngược. Câu trả lời bạn đưa ra hoạt động trên văn bản mẫu vì nó sẽ tham lam tìm dấu ngã thứ hai và tiêu thụ nó, tuy nhiên nếu một dấu ngã đơn cũng tồn tại trong văn bản ở bất cứ đâu, nó cũng sẽ được thay thế bằng một dòng mới.
ErikE

Nếu Công cụ năng suất năng suất được cài đặt, bạn vẫn có thể thực hiện ctrl + shit + h và sau đó ctrl + h để mở cửa sổ Tìm kiếm / Thay thế Visual Studio gốc.
Neb

Cần lưu ý rằng nếu "Sử dụng biểu thức chính quy" được chọn, người ta cũng có thể sử dụng "\ n" để tìm (và thay thế) các dòng mới.
Jacob Lockard

28

Bạn cũng có thể thử \x0d\x0atrong hộp "Thay thế bằng" với hộp "Sử dụng Biểu thức thông thường" được chọn để nhận trả lại vận chuyển + nguồn cấp dữ liệu bằng cách sử dụng / Thay thế Visual Studio. Sử dụng \n(nguồn cấp dữ liệu) giống như\x0a


13

Nếu bạn đặt cờ "Sử dụng biểu thức chính quy" thì \ n sẽ được dịch. Nhưng hãy nhớ rằng bạn sẽ phải sửa đổi cụm từ tìm kiếm của mình để trở nên thân thiện. Trong trường hợp của bạn, nó nên được thoát như thế này "\ ~ \ ~ \?" (không có báo giá).


3
'~' không cần phải thoát trong Regex. Đó là một nhân vật theo nghĩa đen. Điều này là không đúng.
ErikE

12

Nếu bạn muốn tránh những rắc rối khi thoát các ký tự đặc biệt trong chuỗi tìm kiếm và thay thế của mình khi sử dụng các biểu thức thông thường, hãy thực hiện các bước sau:

  1. Tìm kiếm chuỗi ban đầu của bạn và thay thế nó bằng "UniqueString42", với các biểu thức thông thường tắt .
  2. Tìm kiếm "UniqueString42" và thay thế nó bằng "UniqueString42 \ nUniqueString1337", với các biểu thức thông thường trên
  3. Tìm kiếm "UniqueString42" và thay thế nó bằng dòng đầu tiên của sự thay thế của bạn (thường là chuỗi ban đầu của bạn), với các biểu thức thông thường tắt .
  4. Tìm kiếm "UniqueString42" và thay thế nó bằng dòng thứ hai của sự thay thế của bạn, với các biểu thức thông thường tắt .

Lưu ý rằng ngay cả khi bạn muốn chỉnh thủ công khớp cho lần tìm kiếm đầu tiên và thay thế, bạn có thể sử dụng "thay thế tất cả" một cách an toàn cho ba bước cuối cùng.

Thí dụ

Ví dụ: nếu bạn muốn thay thế điều này:

public IFoo SomeField { get { return this.SomeField; } }

với:

public IFoo Foo { get { return this.MyFoo; } }
public IBar Bar { get { return this.MyBar; } }

Bạn sẽ làm những thay thế sau:

  1. public IFoo SomeField { get { return this.SomeField; } }XOXOXOXO(regex tắt ).
  2. XOXOXOXOXOXOXOXO\nHUHUHUHU(regex trên ).
  3. XOXOXOXOpublic IFoo Foo { get { return this.MyFoo; } }(regex tắt ).
  4. HUHUHUHUpublic IFoo Bar { get { return this.MyBar; } }(regex tắt ).

@Alex Nếu bạn có một giải pháp thiết thực cho vấn đề này mà tránh phải thoát thủ công tìm kiếm và thay thế văn bản của bạn khi chuyển đổi nó thành biểu thức thông thường và dành 10 phút tiếp theo để khắc phục quái vật được tạo theo cách đó, tôi rất vui khi nghe Nó, vì câu trả lời của tôi chỉ là một hack xấu xí. Nhưng như bạn có thể thấy, tất cả các câu trả lời khác hoạt động trên Visual Studio vanilla mà không cần các trình cắm bổ sung yêu cầu sử dụng các biểu thức thông thường và do đó thoát khỏi văn bản đơn giản.
Suzanne Dupéron

2
Tôi không có ý đó theo một cách xấu. Tôi xin lỗi tôi đã quên đặt một nụ cười: D Về giải pháp, không tôi không có cái nào liên quan đến VS. Nhưng tôi thấy rằng bất kỳ trình soạn thảo bên ngoài phong nha nào hỗ trợ regex (notepad ++, v.v.) đều hoạt động khá tốt.
Alex

2
UltraEdit là vua thay thế tìm kiếm - ở đây bạn tìm kiếm các dòng mới, ngắt dòng hoặc bất cứ điều gì đơn giản bằng cách đánh dấu các dòng đó và bắt đầu tìm kiếm. - Đối với thay thế bạn simpy nhập ^ n cho \ n, ^ r cho \ r và ^ t cho \ t - nếu chỉ VS2010 sẽ làm như vậy :-)
Miros

Bạn luôn có thể truy cập regex101.com để xem chuỗi tìm kiếm của bạn có khớp với các ký tự bằng chữ hoặc được hiểu là các ký tự điều khiển Regex không.
ErikE

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.