2012-01-18 17 views
1

テキストファイルで文字列を検索しようとしています。私はRegExメソッドを使っています。しかし、メソッド出力として、見つかったStringの前に存在するPrevious Stringを取得する必要があります。どうすればC#でそれをすることができますか?誰か私にアイデアを教えてもらえますか?例については文字列を検索しても前の文字列を返す

:そのテキストファイルで
は私が'router0000;'を探していると私は'router0000;'を見つけた場合、私は'routerbl'を取得したい'routerbl router0000;'
とラインです。

+1

可能な文字列の例、一致する必要があるものと一致しないもの、返される必要があるものの例が必要です。 – Oded

答えて

4

あなたは2つのpos sibilities

  1. マッチあなたがcapturing groupを使用したい場合は、この

    (\S+)\s+router0000 
    

    のようなもの、あなたが1

  2. があなたのパターンに一致し、次の文字列を確実にキャプチャグループにあなたの結果を見つけますとlookahead

    \S+(?=\s+router0000) 
    

    これはあなたが望む部分だけに一致します。

+0

thx for Help。私は2番目の可能性を試していました。 – user1051723

-1

それは完全なラインの一例であると仮定すると:

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

これは 'router0000'部分と一致し、' routerbl'部分とは一致しません。 – Aphelion

+0

"私は 'router0000;を検索しています。もし私が 'router0000;'を見つけたらそれから私は 'routerbl'を手に入れたいと思っています。 "彼はラインの始めにパートを手に入れたいと思っています。私は彼が一致し、彼が戻ってきたいものを返すと言ったものに基づいて一致しています。 – Ilion

+0

実際、私はこの例では背後の見た目は本当に必要ではないと思います。 – Ilion

0

私はポジティブlookahead二つの方法

  • 使用グループ(routerbl) (router0000)を考えると、最初のグループ
  • を使用することができます。routerbl (?=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

+1

質問者が指定しなかった要件についてはあまり仮定していないので、 '。*'はより良い答えだと思います。 –

関連する問題