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

1

Existe uma solução de expressão regular no Microsoft Word para corresponder aos limites das células?
Recentemente eu tive uma tabela com várias células começando com um espaço e tive que removê-las, infelizmente ^ para coincidir com o início da string está disponível no .NET, mas não na palavra find e replace; também ^p sem usar curingas não encontrou o que eu precisava.

Da mesma forma que freqüentemente trabalho com documentos, a regex do Word é capaz de gerenciar limites de células de qualquer maneira? (encontrar texto que é distribuído por várias células, corresponder ao final da célula, procurar apenas em tabelas ...)

    
por Máté Juhász 19.07.2015 / 10:56

2 respostas

1

Eu tentei a seguinte abordagem para evitar deixar o Word. Desta vez, é baseado no Regex disponível no VBA.

Abra o editor do Visual Basic (Alt + F11)
Adicionar referência:
Ferramentas - > Referências - > 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

Saídas exemplificativas dessa função
INPUT - representa o valor da célula antes que a regra seja aplicada
OUTPUT - representa o valor da célula depois que a regra é aplicada

INPUT=""
OUTPUT=""

INPUT=""
OUTPUT=""

INPUT="a"
OUTPUT="a"

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

INPUT="< br>


"
OUTPUT=" "

INPUT="


c "
OUTPUT=" c "

INPUT="






b"
OUTPUT="a

b"

    
por 23.07.2015 / 12:29
1

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

Etapas para recriar:
1. Abra o Word 2007
2. Ribbon.Insert.Table - > Tabela 2x2
3. Tabela 1.Cell (0,0) = 'a', Tabela 1.C (0,1) = 'b', Tabela1.Celular (1,0) = 'c', Tabela1.Celular (1,1) = 'd'
4. Ribbon.Insert.Table - > Tabela 2x2
5. Tabela2.Celular (0,0) = 'e', Tabela2.C (0,1) = 'f', Tabela2.Celular (1,0) = 'g', Tabela2.Celular (1,1) = 'h'
6. Office Button.Save As.Other Forats - > Documento XML do Word (* .xml)
7. Abra o arquivo no Notepad ++ (minha versão é 6.6.9)

Observações:
1. Cada tabela fica em < w: tbl > tag independentemente de quantas tabelas criamos no documento do 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, 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 myValue
2. A substituição do Regex é necessária

Solução:
1. Em N ++ digite Ctrl + H (ou Menu - > Pesquisa - > Substituir - > Substituir guia - > Modo de pesquisa="Expressão regular")
2. Em 'Substituir por:' deixe o valor em branco e em 'Localizar: use esta expressão' (? < = xml: space="preservar" >) (\ s +) '(// excluindo aspas) e clique em "Substitua tudo"
3. Em 'Substituir por:' deixe um valor em branco e em 'Localizar: use esta expressão' xml: space = 'preserve' 'e clique em' Substituir tudo '
4. Salvar documento
5. Abrir documento no Word
6. Salvar como doc (x)

    
por 22.07.2015 / 21:49