2010-10-18 32 views
5
someText 
1 
2 
3 
4 
moreText 

Tôi muốn thêm tiền tố trước mỗi chữ số.eclipse - regex: thay thế nhiều nhóm

nhưng sử dụng (\w+\R)(\d+\R)+(\w+)\1prefix\2\3 sẽ chỉ thêm tiền tố chữ số cuối cùng và xóa các chữ số khác.

Có cách nào để làm điều đó với một regex duy nhất hoặc tôi nên viết một kịch bản ở bên cạnh?

+0

'multiple' hoặc' mutable'? – leppie

+0

Điều này thực sự là một sự đơn giản hóa của regex thực sự của tôi. Nhưng ý tưởng là văn bản xung quanh các chữ số giúp tôi phát hiện ra khu vực tôi phải chỉnh sửa. Tôi có nhiều tệp lớn để chỉnh sửa và chạy từng bước thay thế bằng một regex đơn giản hơn sẽ mất một chút thời gian – Garagos

Trả lời

5

Sự cố với regex của bạn là sử dụng kết hợp tham lam trong (\d+\R)+, cụ thể là + cuối cùng. Điều đó đọc, "phù hợp với nhóm này nhiều lần như bạn có thể miễn là nó không gây ra sự bỏ lỡ của một trận đấu". Vì vậy, cho văn bản của bạn nó gobbles lên 1, 2, 3, và 4 trước khi nó không thể gobble nữa và đặt trận đấu cuối cùng vào nhóm chụp thứ hai. Rõ ràng, đó là bản chất của động cơ regex để không thể diễn tả các nhóm variadic, làm thế nào bạn sẽ giải quyết chúng? Vì vậy, câu trả lời ngắn, tôi nghĩ rằng regexes là công cụ sai cho một quá trình hoàn toàn tự động và bạn sẽ phải viết một kịch bản.

Tuy nhiên, đối với một quá trình hơi ít tự động mà vẫn kết hợp văn bản xung quanh bạn, bạn có thể thử

find: (\w+\R)((?:\d+\R)+)(\w+) 
replace: \1prefix\2\3 

Chúng tôi quấn nhóm thứ hai cộng với đó là sửa đổi tham lam trong thêm một bộ Parens chụp và kèm theo phù hợp với thực tế văn bản trong nhóm không chụp. Bây giờ, chúng tôi có tập hợp đầy đủ các chữ số trong nhóm của riêng họ và có thể thêm tiền tố vào số đầu tiên. Các tác dụng phụ thú vị của điều này là số đầu tiên sau đó phù hợp với nhóm đầu tiên (\w+\R) và nếu bạn chạy tìm/thay thế một lần nữa nó chạm số tiếp theo trong dòng cho đến khi nó không còn phù hợp.

Bằng cách này, bạn sẽ có thể chạy qua các tệp của mình ít nhất chỉ nhấn các khu vực bạn quan tâm để thêm tiền tố này và không nên mất gần như tìm kiếm mọi chữ số trong mỗi tệp.

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