จะใช้ข้อความจากการจับกลุ่มใน Google Docs regex แทนได้อย่างไร


12

ฉันพยายามจับคู่ข้อความแล้วแทนที่ด้วยข้อความพร้อมอักขระพิเศษบางตัว ข้อความตัวอย่างน้อยที่สุด:

#10 Oranges. These are citrus fruits

ผลลัพธ์ที่ต้องการ:

#10 Oranges. These are citrus fruits

regex: (#\d{1,2}[^.]*\.)\s*

แทนที่ด้วย: $1\n

(ฉันได้Match using regular expressionsตรวจสอบแล้ว)

regex #10 Oranges.ประสบความสำเร็จตรง อย่างไรก็ตาม backreference เลขไม่ได้แทนข้อความที่มีกลุ่มจับ แต่เพียงแค่ไปในตัวอักษร (output ที่แท้จริงคือ$1\n) ฉันได้ลองใช้ backslash สำหรับ backreference ที่เป็นตัวเลข\1และผลลัพธ์ก็เหมือนกัน

มีบางอย่างที่ฉันขาดหายไปหรือไม่? ฉันจะแทรกข้อความที่ตรงกันใน Google เอกสารโดยใช้นิพจน์ทั่วไปได้อย่างไร


2
ตอนนี้เอกสารระบุอย่างชัดเจน: Note: Capture groups only work with Google Sheets.ดูsupport.google.com/docs/answer/62754#regular_expressions
ผู้ใช้

คำตอบ:


4

คำตอบสั้น ๆ

แทนที่จะใช้ฟังก์ชันค้นหาและแทนที่ในตัวให้ใช้Google Apps Scriptหรือส่วนเสริม

คำอธิบาย

ในคุณลักษณะการค้นหาและแทนที่ของ Google เอกสารส่วนการแทนที่ไม่ทำงานกับนิพจน์ทั่วไปและไม่สามารถใช้replaceText()วิธีการจากบริการเอกสารใน Google Apps Script ได้ แต่โชคดีที่วิธีการแทนที่ JavaScript นั้นใช้งานได้

หากต้องการเรียนรู้พื้นฐานการสร้างสคริปต์อย่างง่ายโปรดดูที่https://developers.google.com/apps-script/overview

รหัส

รหัสนี้เป็นการดัดแปลงของรหัสที่รวมอยู่ในข้อมูลอ้างอิง

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') );
  }
}

อ้างอิง


3
ฉันจะพิจารณาดูนี้ แต่ความจริงที่ว่าแทนที่ไม่ได้ทำงานกับ regex ข้อผิดพลาดหรือไม่? ตามเอกสารนี้ดูเหมือนว่าควรใช้งานได้: support.google.com/docs/answer/62754#regular_expressions (ดูหัวข้อReplace with regular expressions)
ผู้ใช้

2

แฮ็คน้อย แต่ไม่ต้องการการเพิ่มพิเศษในสคริปต์และอาจครอบคลุม 99% ของกรณีการใช้งานของคุณ คุณยังสามารถใช้กลุ่มจับกับRegexReplaceและการอ้างอิงในแทนที่ข้อความด้วยหรือ$1 $2เพียงแค่แยก regex ของคุณออกเป็นสองกลุ่มจับและ concatenate กับสุ่ม (ใช้ไปนาน ๆ ) ~ตัวละครเช่น จากนั้นคุณสามารถรับค่าที่ส่งคืนทั้งหมดจากนั้นและแทนที่~ด้วยขึ้นบรรทัดใหม่:

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

ภาพหน้าจอ

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับไวยากรณ์ของ regex ที่ใช้ในแผ่นงาน Google ให้ดูข้อมูลจำเพาะ re2


คำถามเกี่ยวกับเอกสารไม่ใช่แผ่นงานเท่าที่ฉันเข้าใจ
törzsmókus

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.