So erstellen Sie einen regulären Ausdruck zum Suchen / Ersetzen in Word 2010


1

Ich habe nur begrenzte Erfahrung mit grundlegendem JavaScript-Regex, mit dem ich einige Benutzerdateneinträge manipuliert habe. Jetzt wurde ich gefragt, ob ich MS Word 2010-Dokumente manipulieren soll.

Insbesondere erhalten meine Benutzer eine lange numerische Liste der Daten als solche:

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 Überschrift, basierend auf dem Artikel in einfachen Anführungszeichen, wie folgt:

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

Sie haben derzeit Schreibkräfte, die diese Änderungen manuell vornehmen (manchmal mit Fehlern). Mit Javascript / jQuery könnte ich Code schreiben, um diese Daten zu erfassen, nach Wörtern in Anführungszeichen zu suchen, die nächstgelegene Zahl vor dem Treffer zu finden und nach dem Zeitraum eine All-CAPS-Version davon einzufügen.

Ich habe jedoch nicht viel Erfahrung mit ähnlichen Funktionen in Word. Kann dies über ein Makro oder eine Art Skript erfolgen? Kann ich meinen Javascript / jQuery-Code schreiben und irgendwie in einer Word-Instanz ausführen lassen?

Danke für die Anleitung!


Wie groß ist das Dokument? Wie eine Seite, 100 Seiten? Wie oft am Tag und wie viele Dokumente? Müssen sie das immer für neue Dokumente tun?
madamission

Die Dokumente haben im Durchschnitt etwa 50 bis 100 Seiten, werden einmal am Tag gedruckt und jeden Morgen in die Warteschlange der Transkriptionisten gestellt. Ein automatisiertes Makro würde den Prozess erheblich beschleunigen.
user1837608

Antworten:


2

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

VBA snip

Das meiste Objektmodell für dieses Regex-Modul befindet sich auf MSDN Hier . Eine Sache, die zu fehlen scheint, ist die MultiLine Rahmen.

Sie verwenden es wie folgt:

  • Instanziiere ein neues Regex-Objekt mit Dim rx as New RegExp
  • Stellen Sie die rx.Global, rx.MultiLine, und rx.IgnoreCase Fahnen wie gewünscht
  • Definieren Sie das Muster, indem Sie die entsprechende Musterzeichenfolge zuweisen rx.Pattern
  • Wenn Sie wissen möchten, ob etwas mit dem regulären Ausdruck übereinstimmt, verwenden Sie rx.Test(str), was zurückkehrt True oder False passend
  • Berufung rx.Execute(str) gibt a zurück MatchCollection Objekt, das sich wie ein nullbasiertes eindimensionales Array von null oder mehr verhält Match Objekte
  • Match Objekte belichten die FirstIndex, Length, Value, und SubMatches Eigenschaften.
    • FirstIndex ist der auf Null basierende Index des ersten Zeichens der Position in str bei dem die Übereinstimmung gefunden wurde
    • Length ist die Länge des übereinstimmenden Teils von str
    • Value ist das Ergebnis der übereinstimmenden Zeichenfolge
    • SubMatches ist ein nullbasiertes Array von Sub-Matched-Gruppen innerhalb des Gesamtspiels
      • Leider unterstützt Office VBA regex keine benannten Gruppen wie z. B. Python. Daher kann es einige Versuche dauern, den Gruppenindex mit dem gewünschten Teil des Musters abzugleichen

Ich glaube nicht, dass es einen Weg gibt, a sed Replace-in-Place-Vorgang im Stil einer reinen Suchfunktion. Es ist jedoch einfach genug, das umgebende VBA zu verwenden, um die Ergebnisse nach Ihren Wünschen zu bearbeiten.


Danke, ich denke das klingt nach der richtigen Antwort - aber es sieht ziemlich kompliziert aus. Ich bin kein Programmierer, sondern nur ein Bastler, der versucht, einigen Kollegen zu helfen. VBA ist mir unbekannt, aber ich kann logischerweise erkennen, dass alle Elemente für das, was ich benötige, vorhanden sind. Ich schaue mir die Referenz an, die Sie verlinkt haben, und probiere sie aus.
user1837608

Sie müssen die Grundlagen der VBA-Programmierung kennen, damit dies funktioniert. Google-Suche des Formulars [VBA object of interest] site:msdn.microsoft.com sind Ihr bester Freund, um Syntax- und andere Informationen über das Objektmodell herauszufinden. Viel Glück!
hBy2Py

0

Wenn es sich nur um Klartext im Word-Dokument handelt und es nicht sehr groß ist und Sie mit JQuery vertraut sind, können Sie eine einfache Site erstellen, auf der sie das Word-Dokument kopieren / einfügen und die erforderlichen Änderungen vornehmen und das transformierte Wort herunterladen können Dokumentieren Sie den gewünschten Text oder geben Sie ihn aus. Es hängt wirklich von mehr Details Ihrer Situation ab, um zu sagen, ob dies eine gute Lösung ist.

Das Makro könnte wahrscheinlich auch erstellt werden, es könnte jedoch schwierig sein, es für Benutzer bereitzustellen, je nachdem, wie viele Benutzer Sie hatten.


Vielen Dank. Dies ist genau die "vorübergehende" Lösung, an der ich gerade arbeite - aber ich hatte gehofft, dass es stattdessen eine elegantere Ein-Knopf-Druckmethode in der Word-Umgebung geben würde.
user1837608

0

Falls Sie nicht VBA- oder Python-fähig sind und die @ hBy2Py-Antwortidee nicht zu Ihrer Kompetenz passt, versuchen Sie es mit Google Sheets / Excel, indem Sie Ihren Algorithmus implementieren:

  1. upload = unformatiertes, einfaches Wort = Textdokument in GSheet importieren. Angenommen, 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 ein Wort in Anführungszeichen verwenden und dieses Wort in Großbuchstaben umwandeln =ARRAYFORMULA(UPPER(REGEXEXTRACT(A:A;"\'([a-z]+)")))
  3. ... oder machen Sie separate Spalte C machen dieses Wort in Großbuchstaben: =UPPER(B:B)
  4. Kombinieren Sie in Spalte C (oder D) die neue Liste mit dem CAPS-Wort =ARRAYFORMULA(REGEXREPLACE(A:A;"\.(\s)";". "&B:B&": "))

TLDR:

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

Eine andere Problemumgehung könnte die hier beschriebene Lösung sein: Suchen und Ersetzen in Notepad ++ mit Wildcards / Regex

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.