2014-02-23 44 views
-1

啓動代碼爲「ABC123」現在,這是不相關的文字及字符, 可能是新線和換行符,報價等完成。正則表達式忽略.NET 2點之間的所有文字

我想我的正則表達式找到一個匹配,其中有以'開始代碼是'開頭的文本,檢索後面的值(在本例中爲abc123),但忽略所有立即在結束報價之後直到「完成」一詞。

所以,如果我有以下文字:

這是一些虛擬的文本。現在開始的代碼是「abc123」,這是 不相關的文本和字符,可能是新行和 中斷,引號等完成。這是更多的虛擬文本。

...匹配會成功,我將能夠檢索值abc123。這是我實際需要使用的唯一部分。

+0

你想作爲一個輸出什麼?對於'這是一些虛擬文本。現在開始代碼是「abc123」,這是不相關的文本和字符,可能是新行和換行符,引號等。完成。這是一些更多的虛擬文本。「字符串你想要它嗎? '這是一些虛擬文本。開始代碼是。這是更多的虛擬文本。「 –

+1

如果你只需要'abc123'(你的例子),爲什麼你關心'Finish'旁邊的內容? –

+0

在實際的完整場景中,會有多個以「開始代碼」開頭並以「完成1」,「完成2」結束等等的文本實例。我希望能夠查找這些文本塊之一的特定實例(可以說,例如,找到最後有'Finish2'的那個),所以我想要的輸出是'abc123'(來自我的例子,儘管這個值在每個實例中會有所不同)。 – marcusstarnes

回答

0
var matches = Regex.Matches(str, ".*Start code.[^\"]*\"([^\"]*)\"[^\"]*.*Finish\\..*"); 
if (matches.Count > 0) 
{ 
    result = matches[0].Groups[1]; 
} 

基本上,你只需要檢查Regex.Matches的結果。這裏使用的唯一「訣竅」是,我限制自己在引號之前,之間和之後尋找非引號字符。

+0

那麼,如果在開始代碼和完成部分之間出現的內容包含引號,那麼這不起作用嗎?無論我的起點和終點之間出現什麼字符,是否有任何匹配的方法? – marcusstarnes

+0

你想在這種情況下得到什麼樣的文本?例如:'現在開始代碼是「abc123」,「完成」。輸出是什麼?abc123?現在? –

+0

輸出只能是abc123(或者在匹配的實例中位於該位置的值開始/結束文本塊) – marcusstarnes

0

您可以使用此模式與lookarounds:

@"(?<=Start code is "")[^""]+(?="")" 

或一個簡單的捕獲組:

@"Start code is ""([^""]+)"""