Regulärer Ausdruck zum Abgleichen von Zellgrenzen

Regulärer Ausdruck zum Abgleichen von Zellgrenzen

Gibt es in Microsoft Word eine Lösung mit regulären Ausdrücken, um Zellgrenzen abzugleichen?
Ich hatte kürzlich eine Tabelle mit mehreren Zellen, die mit einem Leerzeichen begannen, und ich musste diese entfernen. Leider ^ist in .NET die Funktion zum Abgleichen des Zeichenfolgenanfangs verfügbar, in der Suchen-und-Ersetzen-Funktion von Word jedoch nicht. Auch ^pohne die Verwendung von Platzhaltern habe ich nicht gefunden, was ich brauchte.

Ich arbeite oft mit ähnlichen Dokumenten. Kann der reguläre Ausdruck von Word irgendwie mit Zellgrenzen umgehen? (Text finden, der sich über mehrere Zellen erstreckt, Zellenende abgleichen, nur in Tabellen suchen …)

Antwort1

Um Word nicht verlassen zu müssen, habe ich den folgenden Ansatz ausprobiert. Dieses Mal basiert er auf in VBA verfügbaren Regex.

Öffnen Sie den Visual Basic-Editor (Alt+F11).
Fügen Sie eine Referenz hinzu:
Extras --> Referenzen --> Microsoft VBScript Regular Expressions 5.5

Sub RemoveInitialSpacesInTablesCells()
Dim NoOfRows As Integer
Dim NoOfColums As Integer
Dim CellValue As Variant
Dim RegEx As RegExp
Dim Expr As String
Dim tbl As Table
Dim temp As String

Set RegEx = New RegExp
Expr = "^(\s+)"

For Each tbl In ActiveDocument.Tables
    NoOfRows = tbl.Rows.Count()
    NoOfColums = tbl.Columns.Count()
    For i = 1 To NoOfRows
        For j = 1 To NoOfColums
            CellValue = tbl.Cell(i, j)
            RegEx.Global = True
            RegEx.IgnoreCase = False
            RegEx.MultiLine = False
            RegEx.Pattern = Expr
            temp = RegEx.Replace(CellValue, "")
            If Len(temp) > 2 Then
                temp = Left(temp, Len(temp) - 2)
            End If
            tbl.Cell(i, j).Range.Text = temp
        Next j
    Next i
Next tbl
End Sub

Beispielausgaben dieser Funktion
INPUT – stellt den Zellenwert vor der Anwendung der Regel dar. OUTPUT
– stellt den Zellenwert nach der Anwendung der Regel dar.

INPUT = ""
OUTPUT = ""

INPUT = " "
OUTPUT = ""

INPUT
= " a"

OUTPUT = "a" INPUT = " a
             b"
OUTPUT = "a
             b"

INPUT = "



"
OUTPUT = ""

INPUT = "


c"
OUTPUT = "c"

INPUT = "



a

                          b"
OUTPUT = "a

                          b"

Antwort2

Ich habe versucht, das beschriebene Szenario nachzubilden, und Folgendes scheint bei mir zu funktionieren.

Schritte zum Neuerstellen:
1. Öffnen Sie Word 2007
2. Menüband.Einfügen.Tabelle-->2x2-Tabelle
3. Tabelle1.Zelle(0,0) = 'a', Tabelle1.C(0,1) = ' b', Tabelle1.Zelle(1,0) = ' c', Tabelle1.Zelle(1,1) = ' d'
4. Menüband.Einfügen.Tabelle-->2x2-Tabelle
5. Tabelle2.Zelle(0,0) = ' e', Tabelle2.C(0,1) = 'f', Tabelle2.Zelle(1,0) = ' g', Tabelle2.Zelle(1,1) = ' h'
6. Office-Schaltfläche.Speichern unter.Andere Formate-->Word-XML-Dokument (*.xml)
7. Öffnen Sie die Datei in Notepad++ (meine Version ist 6.6.9)

Beobachtungen:
1. Jede Tabelle befindet sich im Tag <w:tbl>, unabhängig davon, wie viele Tabellen wir im Word-Dokument erstellt haben
. 2. Wenn der Wert nicht mit einem Leerzeichen beginnt, hat er die folgende Struktur <w:t>myValue</w:t>
3. Wenn der Wert mit einem Leerzeichen beginnt, hat er die folgende Struktur <w:t xml:space="preserve"> myValue</w:t>

Schlussfolgerungen:
1. Es scheint, dass das, was entfernt werden muss, ' xml:space="preserve"' UND Leerzeichen vor myValue sind.
2. Regex-Ersetzung ist erforderlich

Lösung:
1. In N++ drücken Sie Strg+H (oder Menü-->Suchen-->Ersetzen-->Registerkarte „Ersetzen“-->Suchmodus = „Regulärer Ausdruck“).
2. Lassen Sie bei „Ersetzen durch:“ den Wert leer und verwenden Sie bei „Suchen nach:“ diesen Ausdruck „(?<=xml:space="preserve">)(\s+)“ (// ohne Anführungszeichen) und klicken Sie auf „Alles ersetzen“.
3. Lassen Sie bei „Ersetzen durch:“ den Wert leer und verwenden Sie bei „Suchen nach:“ diesen Ausdruck „xml:space="preserve““ und klicken Sie auf „Alles ersetzen“.
4. Dokument speichern.
5. Dokument in Word öffnen
. 6. Als doc(x) speichern.

verwandte Informationen