Регулярное добавление ненужных пробелов во время замены - PullRequest
0 голосов
/ 03 марта 2019

В настоящее время у меня возникли проблемы с VBScript, который я пишу, который содержит несколько операций чтения и замены из текстового файла.Выражение, которое я использую, находит выражение и заменяет его, но добавляет три пробела после слова, делая оригинальную строку под ним испорченным форматированием.Вот изображение того, о чем я говорю:

Вот пастбина до и после, а не изображения: https://pastebin.com/Uw3H59QK

Вот мой код RegExp:

Set fso = CreateObject("Scripting.FileSystemObject")

Dim strPath

strPath = SelectFolder( "" )

If strPath = vbNull Then
    WScript.Echo "Script Cancelled - No files have been modified" 'if the user cancels the open folder dialog
Else
    WScript.Echo "Selected Folder: """ & strPath & """" 'prompt that tells you the folder you selected
End If

Function SelectFolder( myStartFolder )

    Dim objFolder, objItem, objShell
    Dim objFolderItems

    On Error Resume Next
    SelectFolder = vbNull

    Set objShell = CreateObject( "Shell.Application" )
    Set objFolder = objShell.BrowseForFolder( 0, "Please select the .dat file location folder", 0, myStartFolder)
    set objFolderItems = objFolder.Items
    If IsObject( objFolder ) Then SelectFolder = objFolder.Self.Path

    Set objFolder = Nothing
    Set objShell = Nothing

    On Error Goto 0

End Function

Set re = New RegExp 'Replacing Position Lines
re.Pattern = "Pos = \((.*)\)"
re.Global = True
re.IgnoreCase = True
For Each f in fso.GetFolder(strPath).Files
    If LCase(fso.GetExtensionName(f.Name)) = "txt" Then
        text = f.OpenAsTextStream.ReadAll 'reading the text file
        f.OpenAsTextStream(2).Write re.Replace(text, """Position"" : mathutils.Vector(($1)),")
        count = count + 1
    End If
Next

Set reAngles = New RegExp 'Replacing Angles
reAngles.Pattern = "Angles = \((.*)\)"
reAngles.Global = True
reAngles.IgnoreCase = True
For Each f in fso.GetFolder(strPath).files
  If LCase(fso.GetExtensionName(f.Name)) = "txt" Then
    text = f.OpenAsTextStream.ReadAll
    f.OpenAsTextStream(2).Write reAngles.Replace(text, """Angles"" : mathutils.Vector(($1)),")
  End If
Next

Set reNames = New RegExp 'Replacing Names
reNames.Pattern = "Name = (.*)"
reNames.Global = True
'reNames.Multiline = True
reNames.IgnoreCase = True
For Each f in fso.GetFolder(strPath).files
  If LCase(fso.GetExtensionName(f.Name)) = "txt" Then
    text = f.OpenAsTextStream.ReadAll
    f.OpenAsTextStream(2).Write reNames.Replace(text, """Name"" : ""$1"",")
  End If
Next

Мое лучшее предположение, что подстановочный знак собирает больше информации, чем нужно ... но я не уверен, как это исправить.Я использовал многие из этих выражений в Notepad ++, поэтому я надеялся легко их перевести на VBS!

...