2012-11-29 76 views
3

對不起,但我對RegEx有點新意,希望有人能夠提供幫助。使用vbscript查找多個正則表達式模式

文件中的問題:

Apples.A.Tasty.Treat.Author-JoeDirt.doc 
    Cooking with Apples Publisher-Oscar Publishing.txt 
    Candied.Treats.Author-JenBloc.Publisher-Event.docx 

我目前使用這段VBScript代碼來代替空格或破折號與一個時期的文件名,但我不知道是否有做到這一點更有效的方式?

Set colRegExMatches = strRegEx.Execute(objSourceFile.Name) 
    For Each objRegExMatch in colRegExMatches 
     strResult = InStr(objSourceFile.Name, objRegExMatch) 
     objTargetFile = Left(objSourceFile.Name, (strResult -1)) & objRegExMatch.Value 
     objTargetFile = Replace(objSourceFile.Name, " ", ".", 1, -1, 1) 
     objTargetFile = Replace(objSourceFile.Name, "-", ".", 1, -1, 1) 
     objSourceFile.Name = objTargetFile 
    Next 

一旦上面的腳本是完整的,我所擁有的文件名單如下:

Apples.A.Tasty.Treat.Author-JoeDirt.doc 
    Cooking.with.Apples.Publisher-Oscar.Publishing.txt 
    Candied.Treats.Author-JenBloc.Publisher-Event.docx 

現在,我想找到任何與作者或出版商開始,只需刪除字符,直到擴展。

myRegEx.Pattern = (?:Author|Publisher)+[\w-]+\. 

如果有額外的時間段添加發布者名稱的第二部分或發佈年份或書號,這主要用於除例外的文件。

Apples.A.Tasty.Treat.doc 
    Cooking.with.Apples.Publishing.txt 
    Candied.Treats.docx 

我試過這段代碼,它似乎工作,但我必須指定文件擴展名。

myRegEx.Pattern = (?:Author|Publisher)[\w-](\S*\B[^txt|docx|doc][\w-].) 

如果我嘗試以下,這條延長爲Candied.Treats文件

myRegEx.Pattern = (?:Author|Publisher)[\w-](\S*\B[^][\w-].) 

    Apples.A.Tasty.Treat.doc 
    Cooking.with.Apples.txt 
    Candied.Treats. 

我一直在使用RegExr生成器在http://gskinner.com/RegExr來測試我的模式,但很茫然,現在。最後,一旦我的模式按預期工作,如何在我的VBScript中使用它?按照下面的方法只需添加一條新線?

objTargetFile = Replace(objSourceFile.Name, "(?:Author|Publisher)[\w-](\S*\B[^txt|docx|pdf|doc][\w-].)", "", 1, -1, 1) 

謝謝。

這是新的vbscript代碼,它似乎什麼都不做。

strFixChars = InputBox("Do you want to replace spaces, dashes and strip tags? (Y/N)", "Confirmation") 
    Set strRegEx = new RegExp 
    For Each objSourceFile in colSourceFiles 
     strFileExt = objFSO.GetExtensionName(objSourceFile) 
     objLogFile.WriteLine "Input File: " & objSourceFile.Name 
     strCount = Len(objSourceFile.Name) 
     strRegEx.Pattern = "(?:Author|Publisher)(.+)\." 
     strRegEx.IgnoreCase = True 
     strRegEx.Global = True 
     Set colRegExMatches = strRegEx.Execute(objSourceFile.Name) 
     For Each objRegExMatch in colRegExMatches 
     strResult = InStr(objSourceFile.Name, objRegExMatch) 
     objTargetFile = Left(objSourceFile.Name, (strResult -1)) & objRegExMatch.Value 
      If strFixChars = "Y" Then 
      objTargetFile = Replace(objSourceFile.Name, " ", ".") 
      objTargetFile = Replace(objSourceFile.Name, "-", ".") 
      objTargetFile = Replace(objSourceFile.Name, "(?:Author|Publisher)(.+)\.", "") 
     End If 
     objLogFile.WriteLine "Output File: " & objTargetFile 
     strFileList = strFileList & vbCrlf & objTargetFile 
    Next 
Next 

回答

0

要快速解決您的正則表達式是使用(?:Author|Publisher)(.+)\.你將不得不在VBScript中一個空字符串替換第一個匹配的組。

+0

謝謝,那有效奇蹟。 – user1861982

+0

我在腳本中試過這段代碼,但沒有發生任何事情。 – user1861982

+0

感謝您的幫助。我終於讓我的腳本根據需要工作。 – user1861982