Gibt es eine Möglichkeit, in einem MS Word-Dokument nach einem Muster zu suchen?


30

Gibt es eine Möglichkeit, Muster in einem MS Word-Dokument nachzuschlagen, anstatt genau übereinzustimmen?

Ich habe ein Dokument, in dem /anstelle von alle Dezimalstellen geschrieben wurden .. Beispielsweise 1.02wurde als geschrieben 1/02, weil die persische Typografie /anstelle des .Dezimalpunkts verwendet.

Da /ist nicht nur für Dezimalzahlen verwendet, und es hat andere Anwendungen, beispielsweise Brüche, Prozentsatz, etc., ist es eine Möglichkeit , ein Muster wie zu finden N/Min einem Word - Dokument, in dem Neine Dezimalzahl an und Mzeigt auch eine andere Dezimalzahl?


2
Wie ist dies nicht ein Duplikat mehr als 5 Jahre nach dem Start von Super User?
Peter Mortensen


Nun, es wäre schwierig, es auf den Notizblock zu verschieben, wenn sich in der Mitte ein anderer Text befände. Nehmen wir an, man schreibt einen Zeitschriftenartikel (verwenden Sie stattdessen Latex), damit er nicht aus dem Wort gerät, oder etwas Ähnlichem würde alle anderen Formatierungen verlieren.
Charm_quark

1
Ich habe es gerade überprüft: Die neuesten MS Word-Versionen speichern Word-Dokumente (* .docx) als gezippte XML-basierte Dokumente. Sobald Sie wissen, wie diese Struktur funktioniert, können Sie Ihre * .docx-Datei entpacken und einen Mustervergleich in den resultierenden XML-Dateistrukturen durchführen.
Dominique

@Dominique das ist interessant. Wussten Sie nicht, dass
Codezombie

Antworten:


12

wie 'N / M' in einem Word-Dokument, wobei N eine Dezimalzahl bezeichnet und M auch eine andere Dezimalzahl anzeigt

Nur für eine Suche können Sie ^#/^#als Suchparameter verwenden. Unter den Optionen more und find Special gibt es einige andere Optionen, die hilfreich sein können.

Nb: ^#ist eine Dezimalstelle, wenn Sie also speziell nach x / yy suchen, dann wäre es ^#/^#^#usw.

ersetzen,

Dies ist eine bessere Option, führen Sie Suchen mit ([0-9])/([0-9])und Ersetzen mit \1.\2durch und aktivieren Sie "Platzhalter verwenden".


Vielen Dank. das findet die Treffer. aber Word akzeptiert keine ^ #. ^ # für das Ersatzteil. Ich möchte die Ziffern um '/' intakt lassen und '/' durch '.' Ersetzen.
Codezombie

1
Versuchen Sie eine Suche mit "([0-9]) / ([0-9])" und ersetzen Sie diese durch "\ 1. \ 2". Entfernen Sie das doppelte Anführungszeichen. und aktiviere "benutze Wildcards"
Charm_quark 30.11.14

37

Wort

Verwenden Sie die Implementierung regulärer Ausdrücke von Microsoft

Drücken Sie CTRL+ H»klicken Sie auf Mehr » Aktivieren Sie Platzhalter verwenden

  • Finde was: ([0-9]{1,2})/([0-9]{2})
  • Ersetzen mit: \1.\2

Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben

Das sieht nach einem verrückten Suchmuster aus, also lasst es uns untersuchen:

  • [0-9] steht für einen einzelnen numerischen Wert (0,1,2,3,4,5,6,7,8 und 9)
  • {1,2}wird zum Zählen von Vorkommen des vorherigen Zeichens oder Ausdrucks verwendet. In unserem Fall bedeutet dies: Suche nur nach einer oder zwei Ziffern .

    Achtung: Wenn Sie ein deutsches Wort verwenden, müssen Sie ;statt als Trennzeichen verwenden,

  • /hat keine besondere Bedeutung. Es wird buchstäblich nach einem Schrägstrich gesucht
  • ()Die runden Klammern sind wichtig. Sie teilen sich das Muster in logische Sequenzen , so dass wir später verwenden können \1, \2... \nin unserem Muster ersetzen. So erhalten wir Werte

Weitere Informationen finden Sie im Abschnitt Die Ausdrücke Stück für Stück im Support-Artikel von Microsoft oder auf der Word-Site von Graham Mayor


VBA (bessere Lösung)

Ich empfehle Ihnen, eine VBA-Methode zu verwenden, die den Standardwerten anderer RegEx-Engines besser entspricht. Sie sind besser dokumentiert und mehr Menschen können Ihnen helfen.

Dieses Makro fordert ein RegEx-Muster auf, das das gesamte Dokument durchsucht und durch die angegebene Zeichenfolge ersetzt.

Drücken Sie ALT+ F11, um den VBA-Editor zu öffnen. Fügen Sie den Code an einer beliebigen Stelle ein und führen Sie ihn mit ausF5

Sub RegexReplace()

    Dim RegEx As Object
    Set RegEx = CreateObject("VBScript.RegExp")    
    On Error Resume Next

    RegEx.Global = True
    RegEx.Pattern = InputBox("Find what:")
    ActiveDocument.Range = _ 
        RegEx.Replace(ActiveDocument.Range, InputBox("Replace with:"))        

End Sub
  • Finde was: (?!\d)/(?=\d)
  • Ersetzen mit: .

Bildbeschreibung hier eingebenBildbeschreibung hier eingeben

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.