Как заменить часть подстроки с помощью регулярных выражений в VBScript? - PullRequest
0 голосов
/ 22 октября 2018

Я читаю текстовый файл в 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)\d{6}"

Set re2 = New RegExp
re2.Pattern = "(:60M:C)\d{6}"

Set re3 = New RegExp
re3.Pattern = "(:60F:D)\d{6}"

Set re4 = New RegExp
re4.Pattern = "(:60M:D)\d{6}"

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 Ответ

0 голосов
/ 22 октября 2018

Вы можете использовать один шаблон:

:60([FM]):([CD])\d{6}

и заменить его одним шаблоном замены:

:60$1:$2120412

См. Демонстрационную версию regex

Подробности

  • :60 - буквальная :60 подстрока
  • ([FM]) - Группа захвата 1: a F или M
  • : - двоеточие
  • ([CD]) - группа захвата 2: a C или D
  • \d{6} - шесть цифр.

$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])\d{6}"
  .Global = True
End With

wscript.echo regex.Replace(s, ":60$1:$2120412")

Вывод:

:60F:C120412P56987456
:60M:C120412P56987456
:60F:D120412P56987456
:60M:D120412P56987456
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...