我有大量的txt文件,我想搜索特定的单词。我的方法是使用excel宏在word中打开txt文件,然后搜索我在excel文件中提供的单词列表的每个出现。它给出了一个列表,列出了每个文档中每个单词的出现频率。我已设法使用以下代码:
Sub CounterofWords()
Application.ScreenUpdating = False
Dim wdApp As Word.Application
Set wdApp = CreateObject("Word.application")
wdApp.Visible = False
For d = 1 To 23
Dim wdDoc As Word.Document
FName = "C:\Users\Andreas\Desktop\test\" & Cells(d + 1, 11) & "_htm.txt"
On Error GoTo txtdesign
Set wdDoc = wdApp.Documents.Open(filename:=FName)
i = 15
Do While Cells(1, i) <> ""
iCount = 0
Application.ScreenUpdating = False
With wdApp.Selection.Find
.ClearFormatting
.Text = Cells(1, i).Value
Do While .Execute
iCount = iCount + 1
wdApp.Selection.MoveRight
Loop
End With
Cells(d + 1, i).Value = iCount
i = i + 1
Loop
wdDoc.Close savechanges:=False
Set wdDoc = Nothing
Next d
wdApp.Quit
Set wdApp = Nothing
Application.ScreenUpdating = True
Exit Sub
txtdesign:
FName = "C:\Users\Andreas\Desktop\test\" & Cells(d + 1, 11) & "_txt.txt"
Resume
End Sub
到目前为止一切正常。现在我希望能够搜索正则表达式。我需要这样做以避免在我的搜索中使用某些单词组合。
似乎是一个问题,我不能写像
With wdApp.Selection.regex
无论如何,我不知道如何在这种情况下使正则表达式工作并感谢您的帮助!
答案 0 :(得分:0)
VBA中的Find方法使用此标志限制了模式匹配:
Selection.Find.MatchWildcards = True
注意:您的代码无法获得正确的结果,因为搜索每个单词的位置都是从前一个单词在文档中停止的位置开始的。您需要“移动”到每个文档的顶部:
Selection.HomeKey Unit:=wdStory
但是如果你需要使用正则表达式进行更复杂的模式匹配,那么在引用“Microsoft VBScript Regular Expressions 5.5”之后,你需要使用RegExp
类的不同方法。请参阅此SO问题的接受答案中的一个很好的解释:How to use Regular Expressions (Regex) in Microsoft Excel both in-cell and loops。
以下是使用正则表达式的示例:
Do While Cells(1, i) <> ""
Application.ScreenUpdating = False
Dim regEx As New RegExp
Dim Matches As MatchCollection
With regEx
.Global = True
.IgnoreCase = True
.Pattern = Cells(1, i).Value
End With
Set Matches = regEx.Execute(wdDoc.Content.Text)
Cells(d + 1, i).Value = Matches.Count
i = i + 1
Loop