在单词通配符搜索中查找字母前的数字

时间:2015-11-29 18:28:31

标签: regex ms-word

我希望在我的文档中的一个字母之前找到并替换所有数字以替换数字,所以表达如" 12m"和" 12M",但不是" 12 m"或" 12。"。我使用http://regexr.com/找到了正确的表达式[0-9] {1,2}(?= [A-Za-z0-9]),但结果在微软词中有所不同。我认为改变" ="到"<"如[0-9] {1,2}(?< [A-Za-z0-9])可行,但它没有找到正确的数字。它发现像" 12 m"和" 1 - "如何更改我在regexr中找到的表达式以产生我在单词中搜索的结果?

我的替换会是" \ 1" sup" (括号内)\ 2"?

提前感谢。

2 个答案:

答案 0 :(得分:0)

对于此示例,通配符语法应该足够了,但您需要保持简单。

([0-9]{1,2})([a-zA-Z0-9])

我不确定替换语法是什么。我不太了解MS Word。

答案 1 :(得分:0)

正如bibadia评论的那样,使用Word的内置查找/替换功能,您无法一步完成此搜索。虽然它可以查找,但它无法有选择地替换格式。为此,您需要使用对象模型代码(VBA /" interop")。这是根据您提供的信息在测试文档上运行的一些示例代码

Sub FindReplaceWithSuperScript()
Dim rng As word.Range
Dim bFound As Boolean
Dim sFind As String

Set rng = ActiveDocument.content
sFind = "([0-9]{1;2})([a-zA-Z0-9])"
With rng.Find
    .Text = sFind
    .MatchWildcards = True
    .ClearFormatting
    .wrap = wdFindStop
    bFound = .Execute
    rng.Select
  Do
    If bFound Then
        rng.Collapse wdCollapseEnd
        rng.MoveStart wdCharacter, -1
        rng.Select
        rng.Font.Superscript = True
    rng.End = ActiveDocument.content.End
    bFound = .Execute(findText:=sFind)
    End If
  Loop While bFound
End With
End Sub