2012-01-18 143 views
1

我試圖在Textfile中找到一個字符串。我正在使用RegEx方法。但是我需要將已找到的字符串之前存在的Previous String作爲方法輸出。我怎樣才能做到這一點與C#?任何人都可以給我一些想法?找到一個字符串,但返回前一個字符串

例如:
在該文本文件是'routerbl router0000;'
我在尋找'router0000;',如果我找到'router0000;'然後我想'routerbl'線路。

+1

我們需要可能的字符串,什麼應該和不應該匹配並返回什麼需要的更多的例子。 – Oded 2012-01-18 10:49:06

回答

4

您有兩個pos sibilities

  1. 匹配你想要什麼用capturing group,這樣

    (\S+)\s+router0000 
    

    的東西,你會發現你的結果捕獲組在1

  2. 匹配您的模式,並確保下面的字符串帶有lookahead

    \S+(?=\s+router0000) 
    

    這隻會匹配你想要的部分。

+0

thx尋求幫助。我正在嘗試第二種可能性,現在正在工作。 – user1051723 2012-01-18 15:05:32

-1

假設是一個完整的行的一個示例:

Regex expression = new Regex("(.*) router0000"); 
+0

這匹配'router0000'部分,而不是'routerbl'部分。 – Aphelion 2012-01-18 10:57:41

+0

「我正在搜索'router0000''如果我找到'router0000'那麼我想得到'routerbl'。「他希望在該行的開頭部分獲得該部分。我基於他所說的匹配並返回他想要返回的內容進行匹配。 – Ilion 2012-01-18 10:59:05

+0

其實我想在這種情況下,背後的外觀並不是真的需要。 – Ilion 2012-01-18 11:00:52

0

我能想到的兩種方式

  • 使用羣體(routerbl) (router0000),並使用第一組
  • lookaheadrouterbl (?=router000)
1

它不會回答你的正則表達式的問題,但如果唯一的規則就是一個特定的子字符串之前返回您的字符串的第一部分,那麼你可以使用一些更簡單的正則表達式比:

string test = "routerbl router0000;"; 
string matchingValue = "router000"; 

int matchingValueIndex = test.IndexOf(matchingValue); 
string leftPart; 
if (matchingValueIndex >= 0) 
{ 
    leftPart = test.Substring(0, matchingValueIndex); 
} 
0

使用表達式(.*)(?=\srouter0000)來查找在router0000文本之前的文本。

string resultString = null; 
try 
{ 
    resultString = Regex.Match(part, @"(.*)(?=\srouter0000)", RegexOptions.Multiline).Value; 
} catch (ArgumentException ex) 
{ 
    // Syntax error in the regular expression 
} 
+0

嗯實際上@stema的解決方案更好,因爲它使用'\ S'而不是'。*',但是這個想法是一樣的。 – Aphelion 2012-01-18 11:42:02

+1

我認爲'。*'是一個更好的答案,因爲它假設的提問者沒有指定的要求較少。 – 2012-01-18 13:56:03

相關問題