Expressão regular para corresponder aos limites das células

Expressão regular para corresponder aos limites das células

Existe uma solução de expressão regular no Microsoft Word para corresponder aos limites das células?
Recentemente tive uma tabela com várias células começando com um espaço e tive que removê-las, infelizmente ^para corresponder ao início da string está disponível no .NET, mas não no word localizar e substituir; também ^psem usar curingas não encontrei o que precisava.

Da mesma forma, costumo trabalhar com documentos. O regex do Word é capaz de gerenciar os limites das células de alguma forma? (encontrar texto espalhado por várias células, corresponder ao final da célula, procurar apenas em tabelas...)

Responder1

Tentei a seguinte abordagem para evitar sair do Word. Desta vez é baseado em Regex disponível em VBA.

Abra o editor Visual Basic (Alt+F11)
Adicione referência:
Ferramentas -> Referências -> Expressões Regulares 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

Saídas exemplares desta função
INPUT - representa o valor da célula antes da regra ser aplicada
OUTPUT - representa o valor da célula após a regra ser aplicada

INPUT = ""
OUTPUT = "

" INPUT
= " "

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

INPUT = " a
             b"
SAÍDA = "a
             b"

ENTRADA = "



" SAÍDA = "" ENTRADA =
" c" SAÍDA = "c" ENTRADA = " a                           b" SAÍDA = "a                           b"
















Responder2

Tentei recriar o cenário descrito e o seguinte parece estar funcionando para mim.

Passos para recriar:
1. Abra o Word 2007
2. Ribbon.Insert.Table -> Tabela 2x2
3. Table1.Cell(0,0) = 'a', Table1.C(0,1) = 'b', Table1.Cell(1 ,0) = 'c', Tabela1.Cell(1,1) = 'd'
4. Ribbon.Insert.Table-->2x2 Tabela
5. Tabela2.Cell(0,0) = 'e', ​​Tabela2.C (0,1) = 'f', Table2.Cell(1,0) = 'g', Table2.Cell(1,1) = 'h'
6. Botão Office.Salvar como.Outros Forats -> Word XML Documento (*.xml)
7. Abra o arquivo no Notepad++ (minha versão é 6.6.9)

Observações:
1. Cada tabela fica na tag <w:tbl>, independentemente de quantas tabelas criamos no documento Word
2. Se o valor não começar com um espaço, ele terá a seguinte estrutura <w:t>myValue</w: t>
3. Se o valor começar com um espaço então ele terá a seguinte estrutura <w:t xml:space="preserve"> myValue</w:t>

Conclusões:
1. Parece que o que precisa ser removido é 'xml:space="preserve"' E espaços antes de myValue
2. A substituição de Regex é necessária

Solução:
1. Em N++ digite Ctrl+H (ou Menu-->Search-->Replace-->Replace tab-->Search Mode = "Regular expression")
2. Em 'Replace With:' deixe o valor em branco e em 'Find what:' use esta expressão '(?<=xml:space="preserve">)(\s+)' (// excluindo aspas) e clique em 'Replace All'
3. Em 'Replace With:' deixe o valor em branco e em 'Encontre o que:' use esta expressão 'xml:space="preserve"' e clique em 'Substituir tudo'
4. Salve o documento
5. Abra o documento no Word
6. Salve como doc(x)

informação relacionada