如何在 VBScript 中使用正则表达式替换部分子字符串?
Posted
技术标签:
【中文标题】如何在 VBScript 中使用正则表达式替换部分子字符串?【英文标题】:How to substitute part of substring using regex in VBScript? 【发布时间】:2018-10-22 09:40:29 【问题描述】:我正在逐行读取 VbScript 中的文本文件,并且每次都将值存储在名为 line_text 的变量中。
The line_text variable can take values as
":60F:C180235P56987456"
":60M:C184535P56987456"
":60F:D182335P56987456"
":60M:D180278P56987456"
根据我的解决方案,我使用了如下四个正则表达式:
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set objFileToRead=fso.OpenTextFile("C:\New\maddy.txt",1)
Set objFileToWrite=fso.OpenTextFile("C:\New\maddy1.txt",2,true)
Dim line_text
Set re1 = New RegExp
re1.Pattern = "(:60F:C)\d6"
Set re2 = New RegExp
re2.Pattern = "(:60M:C)\d6"
Set re3 = New RegExp
re3.Pattern = "(:60F:D)\d6"
Set re4 = New RegExp
re4.Pattern = "(:60M:D)\d6"
patt1=":60F:C120412"
patt2=":60M:C120412"
patt3=":60F:D120412"
patt4=":60M:D120412"
do until objFileToRead.AtEndOfStream Then
line_text = objFileToRead.ReadLine()
If re1.test(line_text) Then
line_text=re1.replace(line_text,patt1)
ElseIf re2.test(line_text) Then
line_text=re2.replace(line_text,patt2)
ElseIf re3.test(line_text) Then
line_text=re3.replace(line_text,patt3)
ElseIf re4.test(line_text) Then
line_text=re4.replace(line_text,patt4)
End If
objFileToWrite.Write(line_text)
Loop
Set objFileToRead = Nothing
Set objFileToWrite = Nothing
由于我想用相同的字符串“120412”替换子字符串中后跟一个字符的六个数字,所以在不使用我使用的四种不同表达式的情况下进行替换的最佳方法是什么。这完全是耗时的。
在 VBScript 中是否有任何可用的分组工具,以便我可以将所有行读取操作的这六位数字分组到一个表达式中,并在重复时用相同的表达式“120412”替换所有数字。
【问题讨论】:
【参考方案1】:您可以使用单一模式:
:60([FM]):([CD])\d6
并用一个替换模式替换:
:60$1:$2120412
见regex demo
详情
:60
- 文字 :60
子字符串
([FM])
- 捕获组 1:F
或 M
:
- 冒号
([CD])
- 捕获组 2:C
或 D
\d6
- 六位数。
$1
代表在捕获组 1 中捕获的值,$2
是包含使用捕获组 2 捕获的文本的占位符。
VB脚本测试:
Dim s As String
Dim regex As Object
s = ":60F:C180235P56987456" & vbCrLf & ":60M:C184535P56987456" & vbCrLf & ":60F:D182335P56987456" & vbCrLf & ":60M:D180278P56987456"
Set regex = CreateObject("VBScript.RegExp")
With regex
.Pattern = ":60([FM]):([CD])\d6"
.Global = True
End With
wscript.echo regex.Replace(s, ":60$1:$2120412")
输出:
:60F:C120412P56987456
:60M:C120412P56987456
:60F:D120412P56987456
:60M:D120412P56987456
【讨论】:
以上是关于如何在 VBScript 中使用正则表达式替换部分子字符串?的主要内容,如果未能解决你的问题,请参考以下文章