Tìm và thay thế văn bản giữa ^ và ~ trong Notepad ++


22

Tôi có một tệp văn bản lớn nơi tôi muốn xóa tất cả văn bản giữa biểu tượng ^ và biểu tượng ~. Điều này cần phải làm việc trên các dòng là tốt.

Tôi đã thử thực hiện Tìm kiếm và Thay thế thông thường bằng cách sử dụng ^*~trong hộp Tìm kiếm và không có gì trong hộp Thay thế nhưng nó tìm thấy 0 kết quả.

Câu trả lời:


23

Điều này là không thể với Tìm và Thay thế thông thường . Nếu bạn sử dụng Notepad ++ 6, bạn có thể tận dụng công cụ regex mới hỗ trợ PCRE ( nguồn ).

Nhấn Ctrl+ Hđể mở hộp thoại Tìm và Thay thế và thực hiện hành động sau:

Find what:          \^.*?~
Replace with:       
Wrap around:        checked
Regular expression: selected
. matches newline:  checked

Bây giờ nhấn Alt+ Ađể thay thế tất cả các lần xuất hiện.

Biểu thức chính quy trong Tìm nội dung được soạn thảo như sau:

  • \^là một nghĩa đen ^ .
  • .*? là số lượng ký tự ít nhất cho phép biểu thức chính quy khớp với nhau.
  • ~là một nghĩa đen ~ .

3
nếu bạn thay đổi. *? ~ thành [^ ~] * ~ thì nó sẽ hoạt động mà không yêu cầu / sử dụng PCRE.
barlop

1
@barlop: Tôi lấy Tìm và Thay thế thường xuyên làm Chế độ tìm kiếm: Bình thường , không Tìm và Thay thế bằng các biểu thức thông thường. Đó có thể là một sự hiểu lầm. Trong mọi trường hợp, nếu tôi nhớ chính xác, các phiên bản trước 6 không hỗ trợ các mẫu nhiều dòng.
Dennis

Các .*?mô hình làm việc cho tôi để tìm kiếm giữa các nhân vật của ;<. Vì vậy, tìm kiếm là TÌM ;.*?<THAY THẾ ;với các tùy chọn được chọn cho Regular expression. matches new line
SherlockS tràn tờ

8

Bạn sẽ muốn tìm kiếm \^.*?~và chắc chắn . phù hợp với dòng mới được kích hoạt:

nhập mô tả hình ảnh ở đây

Điều này là bởi vì ^có một ý nghĩa đặc biệt, nó phù hợp với sự bắt đầu của một dòng. Vì vậy, chúng ta cần phải thoát nó bằng dấu gạch chéo ngược \^.

Viết ^*sẽ khớp với "bất kỳ số lượng bắt đầu nào trong một hàng". .*khớp với "bất kỳ ký tự nào", nhưng theo mặc định, nó không khớp với các dòng mới.


2
Hãy cẩn thận với hành vi tham lam của regex. Nếu có nhiều ~ký tự (hoặc nghĩa là nhiều trận đấu), điều này sẽ khớp lần đầu tiên ^cho đến lần cuối cùng ~.
heavyyd

@ematvyd <câu hỏi> Bạn có chắc không? </ câu hỏi>. Anh ta đã sử dụng *?rằng không tham lam, lười biếng .*?~sẽ không bao giờ phù hợp hơn một ~. Vậy là được rồi.
barlop

@barlop: Anh nhận xét ngay sau khi tôi trả lời. Đó là một chỉnh sửa ninja.
Der Hochstapler

2

Hãy thử sử dụng biểu thức chính này trong phần tìm kiếm \^[^~]*~ để thay thế mọi thứ trong khoảng từ ^ đến ~.


và độc quyền, sau đó tôi cho rằng cần PCRE, sau đó làm một cái gì đó (? <= ^) [^ ~] * (? = ~) Tôi không có n ++ để kiểm tra nó, nhưng nếu thất bại, hãy thử thay đổi (? <= ^ ) đến (? <= \ ^)
barlop

Đối với độc quyền, chỉ cần thay thế bằng ^~.
Dennis

@Dennis Ý tôi là nếu anh ta muốn thay thế mọi thứ giữa ^ và ~ nhưng không bao gồm ^ và ~
barlop

1
Đó không phải là những gì bạn nhận được nếu bạn thay thế \^[^~]*~bằng ^~?
Dennis

@Dennis oh tôi hiểu ý của bạn, điểm tốt.
barlop

0

Tôi đã có một yêu cầu thay thế GIỮA tương tự với các ký tự bắt đầu và kết thúc. Điều này đến từ email triển vọng; hàng trăm thành viên và tôi chỉ muốn tên người với mọi thứ bị xóa giữa <RemoveTextHere> .

Nguyên

First1 Last1 <First1.Last1@email.com>; First2 Last2 <First2.Last2@email.com>; First3 Last3 <First3.Last3@email.com>; First4 Last4 <First4.Last4@email.com>;

Dennis gần với giải pháp của tôi Find what: \^.*?~nhưng tôi phải thay đổi các ký tự theo nghĩa đen của mình Find what: \<.*?>sau đó tôi phải xóa dấu gạch chéo đầu tiên Find what: <.*?>.

Cập nhật Find what: <.*?> ; Thay trống.

First1 Last1 ; First2 Last2 ; First3 Last3 ; First4 Last4

_

Nhân vật đặc biệt : *, $, \, +, ^, (), [, ], {}

Các nhân vật đặc biệt được mô tả bởi Jerry Jeremiah tại đây /programming/37742519/notepad-wildcard .


Điều đó không trả lời câu hỏi.
Toto
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.