我想从 Notepad++ 中的许多 .txt 文件中提取特定数据。一个文件中有很多数据,但我只需要特定的...
文件中的内容如下:
©Q Ńü Vý 8 ź) €G' €\Y € €w) €â` € K¶ K¶}Ąg† ‚Z™y ë( \Y
SCfsfgh4GHGH1+ €‡Ş € € €?° €¸ € kk € ‡Ş b | -A233 ™ž B¤ ˙˙˙˙˙˙˙˙˙˙˙˙˙ ' ˙ rtSdpeRB ˙ GÚS)PS 3:TRANSMIT FILE 由建模者版本 1101322 SCH_900000_9008 创建 @Ź@
我需要提取这个:
A233
提示:- 号前有一个空格(-A233)此外,每个文件在字母 A 旁边都有不同的数字
原始文件如下所示(许多空格是通过复制粘贴提取的):
答案1
您可以使用以下内容替换(ctrl-h):
找什么:.*? -(A\d+)
用。。。来代替:\1\n
如果文件中存在“.匹配换行符”复选框,请选中它
解释:
.*? -
- 查找到“-”为止的所有内容,包括任何换行符
(A\d+)
- 定义一个捕获组,查找 A 后面紧跟着 1 个或多个数字
\1\n
- 用捕获的数字替换匹配项,并用换行符分隔它们
\n
你可以用你选择的分隔符替换
请注意,这不会删除最后一场比赛后的任何文本,但由于您已经在文本编辑器中,因此删除它是微不足道的。
答案2
由于您有许多 .txt 文件,因此执行简单的自动化操作而不是手动从每个文件中提取值是有意义的。我建议使用下面的 WSH VBScript:
strRes = ""
For Each strPath In WScript.Arguments
With CreateObject("Scripting.FileSystemObject")
If .FileExists(strPath) Then
strRes = strRes & .GetFileName(strPath) & vbCrLf
strCont = LoadTextFromFile(strPath, "us-ascii")
With CreateObject("VBScript.RegExp")
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = "-A(\d{3})"
Set objMatches = .Execute(strCont)
For Each objMatch In objMatches
strRes = strRes & objMatch.SubMatches(0) & vbCrLf
Next
End With
End If
End With
Next
ShowInNotepad strRes
Function LoadTextFromFile(strPath, strCharset)
With CreateObject("ADODB.Stream")
.Type = 1 ' TypeBinary
.Open
.LoadFromFile strPath
.Position = 0
.Type = 2 ' adTypeText
.Charset = strCharset
LoadTextFromFile = .ReadText
.Close
End With
End Function
Sub ShowInNotepad(strToFile)
Dim strTempPath
With CreateObject("Scripting.FileSystemObject")
strTempPath = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%") & "\" & .GetTempName
With .CreateTextFile(strTempPath, True, True)
.WriteLine strToFile
.Close
End With
CreateObject("WScript.Shell").Run "notepad.exe " & strTempPath, 1, True
.DeleteFile (strTempPath)
End With
End Sub
只需将此代码粘贴到记事本,另存为文本文件,然后手动将.txt
文件扩展名替换为.vbs
。然后,您只需在资源管理器窗口中选择文本文件,然后将其拖放到脚本上即可。
对于您共享的文件,我的输出如下:
30_SCH51BQ139.txt
036
30_SCH51BQ141.txt
038
30_SCH51BQ144.txt
040
30_SCH51BQ147.txt
043