Jak używać tekstu z przechwytywania grup w wyrażeniach regularnych Dokumentów Google?


12

Próbuję dopasować określony tekst, a następnie zastąpić tekstem i kilkoma dodatkowymi znakami. Minimalny przykładowy tekst:

#10 Oranges. These are citrus fruits

Pożądane wyjście:

#10 Oranges. These are citrus fruits

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

Zamienić: $1\n

( Match using regular expressionsSprawdziłem)

Wyrażenie regularne pomyślnie pasuje #10 Oranges.. Jednak numerowane odniesienie wsteczne nie zastępuje tekstu grupą przechwytującą, ale po prostu wchodzi dosłownie (dosłowne dane wyjściowe są $1\n). Próbowałem także użyć odwrotnego ukośnika dla numerowanego odsyłacza wstecznego \1i wynik jest taki sam.

Czy czegoś brakuje? Jak wstawić ponownie dopasowany tekst do dokumentów Google przy użyciu wyrażeń regularnych?


2
Dokumenty teraz wyraźnie stwierdzają: Note: Capture groups only work with Google Sheets.Zobacz support.google.com/docs/answer/62754#regular_expressions
Użytkownik

Odpowiedzi:


4

Krótka odpowiedź

Zamiast korzystać z wbudowanej funkcji znajdowania i zamieniania, użyj Google Apps Script lub dodatku.

Wyjaśnienie

W funkcji Znajdź i zamień w Dokumentach Google część Zamień nie działa z wyrażeniami regularnymi i nie działa ani z replaceText()metodą z usługi Dokumenty w Google Apps Script, na szczęście metoda zamiany JavaScript działa.

Aby poznać podstawy tworzenia prostego skryptu, zobacz https://developers.google.com/apps-script/overview

Kod

Ten kod jest adaptacją kodu zawartego w odnośniku

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

Bibliografia


3
Zastanowię się nad tym, ale czy fakt, że zamiana nie działa z regex, jest błędem? Zgodnie z tą dokumentacją wygląda na to, że powinna działać: support.google.com/docs/answer/62754#regular_expressions (patrz sekcja Replace with regular expressions)
Użytkownik

2

Trochę hacky, ale nie wymaga dodatkowego skryptu i prawdopodobnie obejmie 99% twoich przypadków użycia. Nadal możesz używać grup przechwytywania z RegexReplaceodniesieniami w tekście zastępującym za pomocą $1lub $2. Po prostu podziel regex na dwie grupy przechwytywania i połącz z przypadkową (rzadko używaną) postacią, taką jak ~. Następnie możesz pobrać całą zwróconą wartość i zastąpić ~ją nową linią:

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

zrzut ekranu

Aby uzyskać więcej informacji na temat składni wyrażenia regularnego używanego w arkuszach google, zobacz specyfikację re2


pytanie dotyczy Dokumentów, a nie Arkuszy, o ile rozumiem.
törzsmókus

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.