Regex 在单词通配符搜索中查找字母前的数字
我希望在我的文档中找到并替换字母前的所有数字,使其成为超字母数字,因此表达式类似于“12m”和“12m”,而不是“12m”或“12”。我使用找到了正确的表达式[0-9]{1,2}(?=[A-Za-z0-9]),但在microsoft word中结果不同。我认为对于这个例子来说,将“=”改为“通配符语法应该足够了,但您需要保持简单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内置的查找/替换功能
([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。你知道如何写表达式,不选择下面的字母吗?我还没能用这个通配符搜索出来。