Làm cách nào để sử dụng văn bản từ các nhóm bắt trong regex Google Docs thay thế?


11

Tôi đang cố gắng khớp văn bản nhất định và sau đó thay thế bằng văn bản cộng với một số ký tự phụ. Văn bản ví dụ tối thiểu:

#10 Oranges. These are citrus fruits

Kết quả mong muốn:

#10 Oranges. These are citrus fruits

Chế độ: (#\d{1,2}[^.]*\.)\s*

Thay thế bằng: $1\n

(Tôi đã Match using regular expressionskiểm tra)

Regex thành công phù hợp #10 Oranges.. Tuy nhiên, độ phản hồi được đánh số không thay thế văn bản với nhóm chụp mà chỉ đi theo nghĩa đen (đầu ra theo nghĩa đen $1\n). Tôi cũng đã thử sử dụng dấu gạch chéo ngược cho độ phản hồi được đánh số \1và kết quả là như nhau.

Có thiếu điều gì không? Làm cách nào để tôi đặt lại văn bản phù hợp trong tài liệu google bằng các biểu thức thông thường?


2
Các tài liệu tại một cách rõ ràng nhà nước: Note: Capture groups only work with Google Sheets.Xem support.google.com/docs/answer/62754#regular_expressions
tài

Câu trả lời:


3

Câu trả lời ngắn

Thay vì sử dụng chức năng tìm và thay thế tích hợp, hãy sử dụng Google Apps Script hoặc tiện ích bổ sung.

Giải trình

Trên tính năng Tìm và Thay thế của Tài liệu Google, phần Thay thế không hoạt động với các biểu thức thông thường và nó không hoạt động với phương thức thay thế () từ Dịch vụ Tài liệu trong Tập lệnh Google Apps, may mắn thay, phương pháp thay thế JavaScript hoạt động.

Để tìm hiểu những điều cơ bản để tạo một tập lệnh đơn giản, hãy xem https://developers.google.com/apps-script/overview

Mã này là một sự thích ứng của một trong những tài liệu tham khảo

function myFunction() {
  var body = DocumentApp.getActiveDocument().getBody();
  var paragraphs = body.getParagraphs();
  for (var i=0; i<paragraphs.length; i++) {
    var text = paragraphs[i].getText();
    paragraphs[i].replaceText(".*", 
       text.replace(/(\d{1,2}[^.]*\.)\s*/gi, '$1\n') );
  }
}

Người giới thiệu


3
Tôi sẽ xem xét xem xét vấn đề này, nhưng thực tế là việc thay thế không hoạt động với regex có phải là lỗi không? Theo tài liệu này, có vẻ như nó sẽ hoạt động: support.google.com/docsfurt/62754#THER_expressions (xem phần Replace with regular expressions)
Người dùng

2

Ít hack, nhưng nó không yêu cầu thêm vào tập lệnh và có thể sẽ bao gồm 99% các trường hợp sử dụng của bạn. Bạn vẫn có thể sử dụng các nhóm chụp RegexReplacevà tham chiếu trong văn bản thay thế bằng $1hoặc $2. Chỉ cần chia regex của bạn thành hai nhóm chụp và ghép với một ký tự ngẫu nhiên (được sử dụng không thường xuyên) như thế nào ~. Sau đó, bạn có thể lấy toàn bộ giá trị được trả về từ đó và thay thế ~bằng một dòng mới:

=SUBSTITUTE(REGEXREPLACE(A1,"(#\d{1,2}[^.]*\.)(\s*)","$1~$2"),"~",CHAR(10))

ảnh chụp màn hình

Để biết thêm thông tin về cú pháp regex được sử dụng trong các trang tính của google, hãy xem thông số re2


câu hỏi là về Docs, không phải Sheets, theo như tôi hiểu.
törzsmókus

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.