So erstellen Sie eine Regex-Suche/Ersetzung in Word 2010

So erstellen Sie eine Regex-Suche/Ersetzung in Word 2010

Ich habe einige begrenzte Erfahrung mit grundlegenden JavaScript-Regex, die ich zum Bearbeiten einiger Benutzerdateneinträge verwendet habe. Aber jetzt wurde ich nach der Bearbeitung von MS Word 2010-Dokumenten gefragt.

Genauer gesagt erhalten meine Benutzer eine lange numerische Liste mit Daten wie etwa:

1. blah blah 'car' blah blah
2. blah blah 'truck' blah blah
3. blah blah 'boat' blah blah

Dies ist ein unformatiertes, einfaches Word-Dokument. Sie möchten nach jeder Ziffer eine formatierte Kopfzeile, basierend auf dem Element in einfachen Anführungszeichen, wie:

1. CAR: blah blah 'car' blah blah
2. TRUCK: blah blah 'truck' blah blah
3. BOAT: blah blah 'boat' blah blah

Sie haben derzeit Transkriptionisten, die diese Änderungen manuell vornehmen (manchmal mit Fehlern). Mit JavaScript/jQuery könnte ich Code schreiben, um diese Daten zu übernehmen, nach Wörtern in Anführungszeichen zu suchen, die nächste Zahl vor der Übereinstimmung zu finden und nach dem Punkt eine Version in Großbuchstaben einzufügen.

Ich habe jedoch nicht viel Erfahrung mit ähnlichen Funktionen in Word. Kann dies über ein Makro oder eine Art Skript erfolgen? Ist es möglich, meinen JavaScript-/jQuery-Code zu schreiben und ihn irgendwie in einer Word-Instanz auszuführen?

Danke für die Anleitung!

Antwort1

Ja! Microsoft Office VBA unterstützt die Suche nach regulären Ausdrücken nativ. Sie müssen "Microsoft VBScript Regular Expressions 5.5" als Referenz im VBA-Editor für jede .docm, .xlsm, usw. Datei hinzufügen, in die Sie Regex-Code einfügen möchten:

VBA-Ausschnitt

Der Großteil des Objektmodells für dieses Regex-Modul ist auf MSDN zu finden.Hier. Was anscheinend fehlt, ist die MultiLineEinstellung.

Sie verwenden es wie folgt:

  • Instanziieren Sie ein neues Regex-Objekt mitDim rx as New RegExp
  • Setzen Sie die Flags rx.Global, rx.MultiLine, und rx.IgnoreCasenach Wunsch
  • Definieren Sie das Muster, indem Sie die entsprechende Musterzeichenfolge zuweisenrx.Pattern
  • Wenn Sie wissen möchten, ob etwas mit dem regulären Ausdruck übereinstimmt, verwenden Sie rx.Test(str), das entsprechend Trueoder zurückgibt.False
  • Der Aufruf rx.Execute(str)gibt ein MatchCollectionObjekt zurück, das sich wie ein nullbasiertes, eindimensionales Array von null oder mehr MatchObjekten verhält
  • Match-Objekte legen die Eigenschaften FirstIndex, Length, Valueund offen SubMatches.
    • FirstIndexist der nullbasierte Index des ersten Zeichens der Position, an strder die Übereinstimmung gefunden wurde
    • Lengthist die Länge des übereinstimmenden Teils vonstr
    • Valueist das übereinstimmende String-Ergebnis
    • SubMatchesist ein nullbasiertes Array derUntergeordnete Gruppenim Gesamtspiel
      • Leider unterstützt Office VBA Regex keine benannten Gruppen wie z. B. Python, daher kann es einige Versuche erfordern, den Gruppenindex mit dem Teil des Musters abzugleichen, an dem Sie interessiert sind

Ich glaube nicht, dass es eine Möglichkeit gibt, eine sed-artige Ersetzungsoperation an Ort und Stelle durchzuführen – es handelt sich um eine reine Suchfunktion. Es ist jedoch recht einfach, das umgebende VBA zu verwenden, um die Ergebnisse nach Wunsch zu manipulieren.

Antwort2

Wenn das Word-Dokument nur Klartext enthält und nicht sehr groß ist und Sie mit jQuery vertraut sind, können Sie eine einfache Site erstellen, in die das Word-Dokument kopiert/eingefügt werden kann. Sie nehmen die erforderlichen Änderungen vor und lassen das transformierte Word-Dokument herunterladen oder den gewünschten Text ausgeben. Ob dies eine gute Lösung ist, hängt wirklich von weiteren Einzelheiten Ihrer Situation ab.

Das Makro ließe sich wahrscheinlich auch erstellen, aber es könnte, abhängig von der Anzahl Ihrer Benutzer, schwierig sein, es den Benutzern bereitzustellen.

Antwort3

Falls Sie sich mit VBA- oder Python-Skripten nicht auskennen und die Antwortidee von @hBy2Py nicht Ihren Kompetenzen entspricht, versuchen Sie es mit einem Workaround, bei dem Sie Ihren Algorithmus in GoogleSheets/Excel implementieren:

  1. Upload = Importieren Sie ein unformatiertes, einfaches Word-TXT-Dokument in G'Sheet. Nehmen wir an, Ihre Liste befindet sich in Spalte A.
  2. Schreiben Sie in Spalte B eine verschachtelte Formel für alle Spalten, indem Sie REGEXEXTRACT für das Wort in Anführungszeichen verwenden und dieses Wort in Großbuchstaben schreiben=ARRAYFORMULA(UPPER(REGEXEXTRACT(A:A;"\'([a-z]+)")))
  3. ... oder erstellen Sie eine separate Spalte C und schreiben Sie das Wort groß:=UPPER(B:B)
  4. in Spalte C (oder D) neue Liste mit Großbuchstaben zusammenfassen (es gibt mehrere Möglichkeiten, dies zu tun, zum Beispiel durch Aufteilen/Verketten oder einfach=ARRAYFORMULA(REGEXREPLACE(A:A;"\.(\s)";". "&B:B&": "))

Kurz zusammengefasst:

=ARRAYFORMULA(REGEXREPLACE(A:A;"\.(\s)";". "&UPPER(REGEXEXTRACT(A:A;"\'([a-z]+)"))&": "))

Als andere Problemumgehung könnte die hier beschriebene Lösung verwendet werden:Suchen und Ersetzen in Notepad++ mithilfe von Platzhaltern/regulären Ausdrücken

verwandte Informationen