Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在单词通配符搜索中查找字母前的数字_Regex_Ms Word - Fatal编程技术网

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

Regex 在单词通配符搜索中查找字母前的数字,regex,ms-word,Regex,Ms Word,我希望在我的文档中找到并替换字母前的所有数字,使其成为超字母数字,因此表达式类似于“12m”和“12m”,而不是“12m”或“12”。我使用找到了正确的表达式[0-9]{1,2}(?=[A-Za-z0-9]),但在microsoft word中结果不同。我认为对于这个例子来说,将“=”改为“通配符语法应该足够了,但您需要保持简单 ([0-9]{1,2})([a-zA-Z0-9]) 我不确定替换语法是什么。我对MS Word不太了解。正如bibadia所说,您不可能使用Word内置的查找/替换功能

我希望在我的文档中找到并替换字母前的所有数字,使其成为超字母数字,因此表达式类似于“12m”和“12m”,而不是“12m”或“12”。我使用找到了正确的表达式[0-9]{1,2}(?=[A-Za-z0-9]),但在microsoft word中结果不同。我认为对于这个例子来说,将“=”改为“通配符语法应该足够了,但您需要保持简单

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


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

正如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

MS Word Find and Replace不支持正则表达式。您需要编写一个宏来使用真正的正则表达式。如果启用了Find and Replace中的通配符,则它支持正则表达式。这是一个通配符搜索和替换,而不是正则表达式搜索和替换。请参见语法,它与正则表达式类似,但不相同。确定。现在我明白了。无法我不明白两者之间的区别。但是,问题仍然存在……这解释了为什么我必须将“=”改为“我怀疑要替换搜索表达式某个部分的格式,实际上需要执行三步替换-例如,查找“12m”等,并替换为12@@@m(或类似的),然后查找“12@@@”然后找到“12@@@”等并替换为12。谢谢!我以前尝试过,但我认为有必要跳过括号。替换是一个问题,因为您不能只选择替换\1而不影响word中的\2。你知道如何写表达式,不选择下面的字母吗?我还没能用这个通配符搜索出来。