2017-12-09 16 views
1

一致させたい文字列には常に "START"というフレーズが含まれます。このフレーズを含む一致のみを返すにはどうすればよいですか?ここで文字列を検索する正規表現ですか?

は私の現在のパターンである。ここでは

"(?<=utm_name=potato\" rel=(\"carrot\"|\"*\") >)(.*?)(?=</a>)"

は、文字列の入力です:

&amp;utm_name=potato" rel="" >[START] This is a sentence.</a>&#32;<span class="beans">&amp;utm_name=potato" rel="carrot" >[START] This is another sentence.</a>&#32;<span class="beans">&amp;utm_name=potato" rel="carrot" >[FALSE] Do not match this sentence.</a>&#32;<span class="beans">

所望の出力:

[START] This is a sentence.

[START] This is another sentence.

電流出力:これを行うには

[START] This is a sentence.

[START] This is another sentence.

[FALSE] Do not match this sentence.

+0

が置き換え '*' 'と* START *'。。? – juharr

+0

@juharrあなたの提案では、結果は次のようになります。 –

+0

\ [START \]。*?\を検索してみませんか?(リンク:https://i.imgur.com/pH8W8b5.png) 。 – Marathon55

答えて

0

一つの方法は、文字列の検索引数を渡す.IndexOf()を使用することです。

検索フレーズのインデックス値とフレーズが終了すると思われる場所のインデックス値を保持するために、intを作成することから始めます。

最初の検索語句の索引と最後の検索語句の索引の間に、必要な部分文字列があります。この場合、最後のフレーズは別の検索文字列で終了します。 e。 </a>

string test = "&amp;utm_name=potato\" rel=\"\" >[START] This is a sentence.</a>&#32;<span class=\"beans\">&amp;utm_name=potato\" rel=\"carrot\" >[START] This is another sentence.</a>&#32;<span class=\"beans\">&amp;utm_name=potato\" rel=\"carrot\" >[FALSE] Do not match this sentence.</a>&#32;<span class=\"beans\">"; 

string searchString = ">[START] "; //start after this 
string endSearchString = "</a>"; //end before this 

最初の検索語句のインデックスを作成するときに、その検索語句の長さを追加するようにしてください。

//find the index of them within the sample test string 
int indexOfInitial = test.IndexOf(searchString) + searchString.Length; 
int indexOfEnding = test.IndexOf(endSearchString); 

新しい部分文字列の長さを作成します。これは、最初の検索フレーズのインデックスを引いた最後の検索フレーズのインデックスの値になります。これで、部分文字列を作成するために必要な作業が完了しました。これはあなたの文字列を入力HERESにコードのデモでどのように機能するかの例について

//create a length for substring 
int length = indexOfEnding - indexOfInitial; 
//create desired substring out of search string and length between start and end phrases 
string desiredSubstring = test.Substring(indexOfInitial, length); 

:。

static void Main(string[] args) 
{ 
    //create sample test string 
    string test = "&amp;utm_name=potato\" rel=\"\" >[START] This is a sentence.</a>&#32;<span class=\"beans\">&amp;utm_name=potato\" rel=\"carrot\" >[START] This is another sentence.</a>&#32;<span class=\"beans\">&amp;utm_name=potato\" rel=\"carrot\" >[FALSE] Do not match this sentence.</a>&#32;<span class=\"beans\">"; 
    //create strings you are searching for 
    string searchString = ">[START] "; 
    string endSearchString = "</a>"; 

    Console.WriteLine("String:"); 
    Console.WriteLine(test); 

    //find the index of them within the sample test string 
    int indexOfInitial = test.IndexOf(searchString) + searchString.Length; 
    int indexOfEnding = test.IndexOf(endSearchString); 

    //create a length for substring 
    int length = indexOfEnding - indexOfInitial; 

    string desiredSubstring = test.Substring(indexOfInitial, length); 

    //desired result 1 
    Console.WriteLine("\nResult 1:\n\n{0}", desiredSubstring); 

    //Take of everything from the indexOfEnding 
    test = test.Substring(indexOfEnding+endSearchString.Length); 
    Console.WriteLine("\nString:\n{0}\n",test);  

    //change the search strings if needed 
    //endSearchString = "</ a >"; //notice the spacing changing 

    //find the index of them again within the new substring 
    indexOfInitial = test.IndexOf(searchString) + searchString.Length; 
    indexOfEnding = test.IndexOf(endSearchString); 
    //create a length for substring 
    length = indexOfEnding - indexOfInitial; 
    //desired result 2 
    Console.WriteLine("\nResult 2:\n\n{0}", test.Substring(indexOfInitial, length)); 
    Console.ReadKey(); 
} 
+1

私は確かにその可能性を見ることができます。ありがとうございました。 –

関連する問題