如何在 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:FM : - 冒号 ([CD]) - 捕获组 2:CD \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 中使用正则表达式替换部分子字符串?的主要内容,如果未能解决你的问题,请参考以下文章

vbscript正则表达式,替换两个字符串

UE中如何使用正则替换行中部分字符串

正则表达式如何替换并修改自身的部分内容?

在 Excel 中使用正则表达式进行查找与替换

在 Excel 中使用正则表达式进行查找与替换

如何使用 javascript 正则表达式替换 URL 的主机部分