Expresión regular para hacer coincidir los límites de las celdas.

Expresión regular para hacer coincidir los límites de las celdas.

¿Existe una solución de expresión regular en Microsoft Word para hacer coincidir los límites de las celdas?
Recientemente tuve una tabla con varias celdas que comenzaban con un espacio y tuve que eliminarlas; desafortunadamente, ^hacer coincidir el comienzo de la cadena está disponible en .NET, pero no en Word Buscar y reemplazar; Además, ^psin usar comodines no encontré lo que necesitaba.

De manera similar, trabajo a menudo con documentos. ¿La expresión regular de Word puede administrar los límites de las celdas de alguna manera? (buscar texto que se distribuye en varias celdas, hacer coincidir el final de la celda, buscar solo en tablas...)

Respuesta1

Probé el siguiente enfoque para evitar salir de Word. Esta vez se basa en Regex disponible en VBA.

Abra el editor de Visual Basic (Alt+F11)
Agregue referencia:
Herramientas --> Referencias --> Expresiones regulares de Microsoft VBScript 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

Resultados ejemplares de esta función
ENTRADA: representa el valor de la celda antes de aplicar la regla
SALIDA: representa el valor de la celda después de aplicar la regla

ENTRADA = ""
SALIDA

= ""
ENTRADA = " "

SALIDA = ""
ENTRADA = " a" SALIDA = "a"

ENTRADA = " a
             b"
SALIDA = "a
             b"

ENTRADA = " "



SALIDA = " " ENTRADA = " c" SALIDA = "c" ENTRADA = " a                           b" SALIDA = "a                           b"

















Respuesta2

Intenté recrear el escenario descrito y lo siguiente parece funcionar para mí.

Pasos para recrear:
1. Abra Word 2007
2. Ribbon.Insert.Table-->2x2 Table
3. Table1.Cell(0,0) = 'a', Table1.C(0,1) = ' b', Table1.Cell(1 ,0) = 'c', Tabla1.Celda(1,1) = 'd'
4. Ribbon.Insert.Table-->2x2 Tabla
5. Tabla2.Celda(0,0) = 'e', ​​Tabla2.C (0,1) = 'f', Table2.Cell(1,0) = 'g', Table2.Cell(1,1) = 'h'
6. Botón de Office.Guardar como.Otros formatos-->Word XML Documento (*.xml)
7. Abra el archivo en Notepad++ (mi versión es 6.6.9)

Observaciones:
1. Cada tabla se ubica en la etiqueta <w:tbl> independientemente de cuántas tablas hayamos creado en el documento de Word
. 2. Si el valor no comienza con un espacio, tiene la siguiente estructura <w:t>myValue</w: t>
3. Si el valor comienza con un espacio, entonces tiene la siguiente estructura <w:t xml:space="preserve"> myValue</w:t>

Conclusiones:
1. Parece que lo que hay que eliminar es 'xml:space="preserve"' Y espacios antes de myValue
2. Se requiere reemplazo de expresiones regulares

Solución:
1. En N++ escriba Ctrl+H (o Menú-->Buscar-->Reemplazar-->Reemplazar pestaña-->Modo de búsqueda = "Expresión regular")
2. En 'Reemplazar con:' deje el valor en blanco y en 'Buscar qué:' use esta expresión '(?<=xml:space="preserve">)(\s+)' (// excluyendo comillas) y haga clic en 'Reemplazar todo'
3. En 'Reemplazar con:' deje el valor en blanco y en 'Buscar qué:' use esta expresión ' xml:space="preserve"' y haga clic en 'Reemplazar todo'
4. Guarde el documento
5. Abra el documento en Word
6. Guarde como doc(x)

información relacionada