Wie verwende ich Text aus der Erfassung von Gruppen in Google Text & Tabellen?

11

Ich versuche, bestimmten Text abzugleichen und ihn dann durch den Text und einige zusätzliche Zeichen zu ersetzen. Minimaler Beispieltext:

#10 Oranges. These are citrus fruits

Gewünschte Ausgabe:

#10 Oranges. These are citrus fruits

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

Ersetzen mit: $1\n

(Ich habe Match using regular expressionsüberprüft)

Der Regex stimmt erfolgreich überein #10 Oranges.. Die nummerierte Rückreferenz ersetzt jedoch nicht den Text durch die Erfassungsgruppe, sondern geht nur wörtlich ein (wörtliche Ausgabe ist $1\n). Ich habe auch versucht, einen Backslash für die nummerierte Backreference zu verwenden, \1und das Ergebnis ist das gleiche.

Fehlt mir etwas? Wie füge ich übereinstimmenden Text mit regulären Ausdrücken wieder in Google Docs ein?

Nutzer
quelle
2
In den Dokumenten wird jetzt explizit angegeben: Note: Capture groups only work with Google Sheets.Siehe support.google.com/docs/answer/62754#regular_expressions
User

Antworten:

3

Kurze Antwort

Verwenden Sie anstelle der integrierten Such- und Ersetzungsfunktion Google Apps Script oder ein Add-On.

Erläuterung

Bei der Funktion "Suchen und Ersetzen" von Google Dokumente funktioniert der Teil "Ersetzen" nicht mit regulären Ausdrücken und auch nicht mit der Methode "replaceText ()" des Dokumentendienstes in Google Apps Script. Glücklicherweise funktioniert die JavaScript-Ersetzungsmethode.

Informationen zu den Grundlagen zum Erstellen eines einfachen Skripts finden Sie unter https://developers.google.com/apps-script/overview

Code

Dieser Code ist eine Anpassung des in der Referenz enthaltenen Codes

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

Verweise

Rubén
quelle
3
Ich werde darüber nachdenken, aber ist die Tatsache, dass das Ersetzen mit Regex nicht funktioniert, ein Fehler? Laut dieser Dokumentation sollte es funktionieren: support.google.com/docs/answer/62754#regular_expressions (siehe Abschnitt Replace with regular expressions)
Benutzer
2

Etwas hackig, aber es erfordert kein zusätzliches Add-On-Skript und wird wahrscheinlich 99% Ihrer Anwendungsfälle abdecken. Sie können weiterhin Erfassungsgruppen mit RegexReplaceund Verweise im Ersetzungstext durch $1oder verwenden $2. Teilen Sie einfach Ihren regulären Ausdruck in zwei Erfassungsgruppen auf und verketten Sie ihn mit einem zufälligen (selten verwendeten) Charakter wie ~. Dann können Sie den gesamten zurückgegebenen Wert daraus ~entnehmen und durch eine neue Zeile ersetzen :

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

Bildschirmfoto

Weitere Informationen zur in Google Sheets verwendeten Regex-Syntax finden Sie in der re2-Spezifikation

KyleMit
quelle
Soweit ich weiß, geht es bei der Frage um Dokumente, nicht um Blätter.
Törzsmókus