2013-03-07 41 views
2

我有一個文件中包含的內容:捕獲某個子字符串的最佳方法?

garbage 
garbage 
printfile ps = "Elopak Zufriedenheit After Sales.ps"; 
garbage 
garbage 

我想捕捉""(雙引號)之間的部分 - 但該部分的值更改不斷。我寫了一個正則表達式找到printfile ps - 但是從那裏出發最好的方法是什麼?

新代碼:

Dim PFileRegex As New Regex("printfile ps *\t*= *\t*""[\w\s]*.ps\s*""") 
Dim PFilematch As Match = PFileRegex.Match(parttext) 

        If PFilematch.Success = True Then 
         Dim Quote As Char = """"c 
         Dim FirstQuote = PFilematch.Value.IndexOf(Quote) 
         Dim LastQuote = PFilematch.Value.LastIndexOf(Quote) 

         Dim PSFile = PFilematch.Value.Substring(FirstQuote + 1, (LastQuote - FirstQuote) - 1) 
         Debug.Print(PSFile) 
        Else 
         'error handlung 
        End If 

回答

1

下面介紹如何使用Regex類來做到這一點:

Dim PFileRegex As New Regex("^printfile ps\s*=\s*""(?<data>.*\.ps\s*)"";.*$", RegexOptions.Multiline) 
Dim PFilematch As Match = PFileRegex.Match(parttext) 
If PFilematch.Success Then 
    Debug.Print(PFilematch.Result("${data}")) 
End If 
+1

ahh謝謝,這真的很整潔! – 2013-03-07 13:38:37

2

你真的需要爲這個正則表達式? String.Substring更高效。

Dim quote As Char = """"c 
Dim first = printfilePs.IndexOf(quote) 
Dim last = printfilePs.LastIndexOf(quote) 
Dim partBetweenQuotes = "" 
If first <> -1 AndAlso last > first Then 
    Dim start = first + 1 
    Dim length = printfilePs.Length - start - (printfilePs.Length - last) 
    partBetweenQuotes = printfilePs.Substring(start, length) 
End If 

DEMO

+0

圍繞這件作品有很多文字 - 特別是有很多引號(「)。第一個和最後一個報價可能不在預期的地方。 此外,還有其他的鍵值對我必須解析 - 所以我認爲正則表達式是最通用的方法。 我基本上是解析手寫的語法文件 - 並且語法文件的順序在每個時間點可能會有所不同 – 2013-03-07 13:15:07

+1

我已經結合了我們的兩個想法,請參閱我的編輯的詳細信息 – 2013-03-07 13:24:28

1

如果你只是想後得到的數值 「prinfile PS =」:

printfile ps *= *"([^"]+)"; 

如果你想獲得的所有鍵值夫婦:

^([^= ]+) *= *"([^"]+)";$ 
+0

這對我不起作用 - 我已經使用了下面的代碼: Dim PFileRegex As New Regex(「printfile ps * = *」「([^」「] +)」「;」) – 2013-03-07 13:11:54

相關問題