匹配单元格边界的正则表达式

匹配单元格边界的正则表达式

Microsoft Word 中是否有正则表达式解决方案来匹配单元格边界?
最近,我有一张表格,其中有几个单元格以空格开头,我不得不删除它们,不幸的是,^在 .NET 中可以匹配字符串的开头,但在 Word 查找和替换中却不行;而且^p如果不使用通配符,就找不到我需要的内容。

同样,我经常处理文档,Word 的正则表达式是否能够以任何方式管理单元格边界?(查找分布在多个单元格中的文本、匹配单元格末尾、仅在表格中查找......)

答案1

我尝试了以下方法来避免离开 Word。这次它基于 VBA 中可用的 Regex。

打开 Visual Basic 编辑器 (Alt+F11)
添加参考:
工具 --> 参考 --> 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

此功能的示例输出
INPUT - 表示应用规则之前的单元格值
OUTPUT - 表示应用规则之后的单元格值

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"

答案2

我尝试重新创建所描述的场景并且以下操作似乎对我有用。

重新创建的步骤:
1. 打开 Word 2007
2. Ribbon.Insert.Table-->2x2 表格
3. Table1.Cell(0,0) = 'a', Table1.C(0,1) = ' b', Table1.Cell(1,0) = ' c', Table1.Cell(1,1) = 'd'
4. Ribbon.Insert.Table-->2x2 表格
5. Table2.Cell(0,0) = ' e', Table2.C(0,1) = 'f', Table2.Cell(1,0) = ' g', Table2.Cell(1,1) = ' h'
6. Office 按钮.另存为.其他格式-->Word XML 文档 (*.xml)
7. 在 Notepad++ 中打开文件 (我的版本是 6.6.9)

观察结果:
1. 无论我们在 Word 文档中创建了多少个表格,每个表格都位于 <w:tbl> 标签中 2.
如果值不以空格开头,则具有以下结构 <w:t>myValue</w:t>
3. 如果值以空格开头,则具有以下结构 <w:t xml:space="preserve"> myValue</w:t>

结论:
1. 似乎需要删除的是 'xml:space="preserve"' 和 myValue 之前的空格
2. 需要使用正则表达式替换

解决方案:
1. 在 N++ 中输入 Ctrl+H(或菜单-->搜索-->替换-->替换选项卡-->搜索模式 = “正则表达式”)
2. 在“替换为:”中保留空白值,在“查找内容:”中使用此表达式“(?<=xml:space="preserve">)(\s+)”(// 不包括引号)并单击“全部替换”
3. 在“替换为:”中保留空白值,在“查找内容:”中使用此表达式“xml:space="preserve"”并单击“全部替换”
4. 保存文档
5. 在 Word 中打开文档
6. 另存为 doc(x)

相关内容