Làm thế nào để bạn tham khảo một nhóm chụp với regex tìm và thay thế trong Visual Studio 2012, 2013, 2015 và VS Code


255

Tôi nhận ra có rất nhiều câu hỏi về vấn đề này, nhưng không có câu hỏi nào tôi tìm thấy cụ thể tham khảo phiên bản VS nào mà họ đề cập đến. Với thông tin quan trọng đó thiếu, tôi vẫn không thể sử dụng thành công các câu trả lời tôi tìm thấy. Phổ biến nhất là

  • Bao quanh với {}, chụp hiển thị với \ 1, \ 2, \ n

Tuy nhiên, đó dường như là phương pháp cũ để thực hiện regex tìm và thay thế trong Visual Studio và nó không hoạt động trong VS 2012.


1
Điều này không quá khó để tìm thấy trong trợ giúp: trong hộp thoại Tìm kiếm / Thay thế, F1; sớm trong việc Tìm kiếm và Thay thế Văn bản có liên kết đến Sử dụng Biểu thức Chính quy trong VS ; có mẹo thứ 2 đề cập đến bạn về Thay thế trong Biểu thức chính quy ; ở đó nó cung cấp cho bạn những điều cơ bản và nói rằng có nhiều chi tiết hơn trong Thay thế một nhóm được đánh sốthay thế một nhóm được đặt tên .
PJTraill

2
@PJTraill thật tuyệt khi biết rằng họ đã giúp trả lời câu hỏi cho phiên bản 2012 của họ dễ dàng hơn vào khoảng giữa năm 2013 và 2015. Mặc dù vậy, tôi nghĩ khá rõ ràng rằng vẫn không quá khó để tìm thấy sự trợ giúp. IMO: Nếu việc tìm kiếm và bỏ phiếu trên một bài viết tràn ngăn xếp dễ dàng hơn so với việc sử dụng tìm, thay thế, chụp mà không cần tìm kiếm trợ giúp, thì nó khó hơn rất nhiều.
SgtPooki

Một điều khiến tôi băn khoăn về MSVS 2012/3 là hai hộp thoại Tìm kiếm / Thay thế khác nhau, đặc biệt là hộp thoại nhỏ hơn (Ctrl-H), trong đó tôi vô tình (với tổ hợp phím có thể có ý nghĩa khác ở một nơi khác) làm thay đổi phạm vi tìm kiếm . Nhưng điểm tôi muốn đưa ra là hộp thoại (Ctrl-Shift-H) lớn hơn có các nút sau các trường Tìm và Thay thế cung cấp cho bạn danh sách các khả năng quan trọng hơn, bao gồm cả những gì bạn đang tìm kiếm - vì vậy bạn không cần giúp đỡ! Tôi đoán rằng nhiều người sẽ không phát hiện ra các nút hoặc hạ cánh trong đoạn hội thoại Ctrl-H và không thể nhìn thấy chúng.
PJTraill

Tôi đồng ý rằng sự giúp đỡ là một chút bận tâm để tìm; Tôi nghi ngờ họ ưu tiên cho tìm kiếm văn bản đơn giản. Quan điểm của tôi là nhiều hơn rằng nếu một người biết hoặc giả định nó phải ở đó, người ta có thể tìm thấy nó một cách hợp lý dễ dàng; Tôi thường đi theo con đường đó, vì tôi thích sử dụng tài liệu chính tắc một khi tôi có thể tìm thấy nó. Tôi không có ý chê bai; Tôi cho rằng đó là cả hai quá khó khăn.
PJTraill

Tôi "biết" rằng việc gắn thẻ REGEXP đang sử dụng '()', đọc lại tài liệu và nó không hoạt động ... vì vậy tôi đến đây để đảm bảo ... sau đó tôi đã thử nghiệm thêm và nó đã hoạt động. Vì vậy, IMHO tài liệu MSDN cần phải cực kỳ rõ ràng rằng () được sử dụng để "gắn thẻ" một biểu thức, cho những người trong chúng ta phải học danh pháp "thẻ" VS6 cũ. Sẽ thật tuyệt nếu họ có thể sử dụng cùng danh pháp đó. Các nhóm được đánh số ... chỉ không kích hoạt các synap đủ tốt IMHO.
Ross Youngblood

Câu trả lời:


356

Để tìm và thay thế trong VS 2012 và VS 2015, bạn làm như sau:

Ví dụ (nhờ syonip)

Trong các tùy chọn tìm kiếm, hãy đảm bảo 'sử dụng các biểu thức chính quy' được chọn và đặt phần sau đây làm văn bản cần tìm:

_platformActions.InstallApp\((.+)\)

Và sau đây là văn bản để thay thế nó bằng:

this.Platform().App($1).Install()

Lưu ý: Như SLaks chỉ ra trong một nhận xét bên dưới, sự thay đổi trong cú pháp regex là do VS2012 chuyển sang công cụ regex .Net tiêu chuẩn.

Lưu ý: Một người bình luận khác chỉ ra rằng điều này cũng hoạt động trong Visual Studio Code (vscode)


10
Nói chung hơn, VS2012 hiện sử dụng công cụ regex .Net tiêu chuẩn.
SLaks

4
Bạn không cần phải thoát khỏi giai đoạn char giữa _platformActionsInstallApp?
rory.ap

Nghĩ về điều đó bây giờ, nó sẽ có ý nghĩa. Tôi đã không kiểm tra nó. Hãy ném một chỉnh sửa trong đó.
SgtPooki

1
Cuối cùng, tôi đã sử dụng tên là số dường như không hoạt động với tôi ít nhất. (?<rval>.+)trong tìm kiếm và thay thế${rval}
Mark Schultheiss

2
Một số trợ giúp bổ sung: nếu bạn muốn thay thế thứ (. *) Bằng thứ 18 (thêm '8' ngay sau khi chụp), bạn sẽ phải sử dụng thứ $ {1} 8
Luc Bloom

17

Để thêm một ví dụ về điều này, đây là điều tôi phải làm trong mã của mình:

Tìm cái gì:

_platformActions.InstallApp\((.+)\)

Thay thế bằng:

this.Platform().App($1).Install()

Điều này thay thế bất kỳ cuộc gọi nào đến InstallApp (x), bằng this.Pl platform (). App (x) .Install ().

* Đừng quên đánh dấu "Sử dụng biểu thức chính quy" trong tùy chọn Tìm


10

Nếu bạn muốn làm việc với việc sử dụng tên nhóm (sử dụng cùng một mẫu như trên):

Tìm cái gì:

_platformActions\.InstallApp\((?<mygroupname>.+)\)

Thay thế bằng:

this.Platform().App(${mygroupname}).Install()

9

Để cải thiện các câu trả lời trên: Bạn nên thay thế

_platformActions.InstallApp\((.+)\)

với

this.Platform().App(${1}).Install()

Hãy nhớ $ {1} nếu bạn muốn thêm một số phía sau chụp. $18sẽ cố gắng chèn bản chụp tìm kiếm thứ 18, không phải bản đầu tiên có phần 8bổ sung.

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.