2012-02-29 10 views
9

メールから何かを抽出しようとしています。電子メールの一般的なフォーマットは、常に次のようになります。ポイントAとBの間の文字列の一部を抽出します

blablablablabllabla hello my friend. 

[what I want] 

Goodbye my friend blablablabla 

今私はでした:それを開始する前に

    string.LastIndexOf("hello my friend"); 
        string.IndexOf("Goodbye my friend"); 

これは私にポイントを与えるだろう、それが開始された時点の後。これにはどのような方法がありますか?私は見つけた:

String.Substring(Int32, Int32) 

しかし、これは開始位置を取るだけです。

何を使用できますか?

+0

を終了することができ、何が起こりますか?これが実行可能なアプローチであると確信していますか? –

+0

はい私は確信しています、それは自動メールです。それはいつもこのように送られます。私のプログラムは定義ファイルから読み込みますが、私はいつも文字列を変更することができます。 – TheGateKeeper

答えて

15

を使用することができますサブストリングは、開始インデックス(ゼロベース)と、コピーしたい文字の数になります。

あなたはこのように、いくつかの数学を行う必要があります:

string email = "Bla bla hello my friend THIS IS THE STUFF I WANTGoodbye my friend"; 
int startPos = email.LastIndexOf("hello my friend") + "hello my friend".Length + 1; 
int length = email.IndexOf("Goodbye my friend") - startPos; 
string sub = email.Substring(startPos, length); 

おそらくconst stringに文字列定数を載せていきたいと思います。電子メールは、「さようなら私の友人」で始まり、「こんにちは、私の友人」か、まったく何もないで終わる場合

+1

こんにちは、ありがとう、これは動作します。ただし、LastIndexOfメソッドの後に文字列を追加する必要はありません。これにより、最後の位置が既に指定されているためです。乾杯。 – TheGateKeeper

+0

はい、それを追加する必要があります...あなたも出力に "hello my friend"が必要な場合を除きます。それを試して...私はした。 –

+0

あなたは正しいですが、なぜこれが起こりますか? email.LastIndexOf( "hello my friend")は、 "friend"の後の文字のインデックスを指定しませんでしたか? – TheGateKeeper

-1

myStr.substring(start,end);

+0

何ですか?私はちょうどその質問に列挙した。そのメソッドは、開始と終了ではなく、開始と長さをとります。 – TheGateKeeper

+0

[docs](http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html)から: 部分文字列(int beginIndex、int endIndex) 新しい文字列を返しますこれはこの文字列の部分文字列です。 そして私はあなたがインスタンスメソッドではなくStringから静的関数について話していると思いました。 –

+0

Npメイト、とにかくありがとう。 – TheGateKeeper

4

を試してみてくださいあなたはまた、正規表現

string s = Regex.Match(yourinput, 
         @"hello my friend(.+)Goodbye my friend", 
         RegexOptions.Singleline) 
      .Groups[1].Value; 
+0

RegExは、直接的な文字列操作に比べてかなり遅くなることがあります。それがOPに関係するかどうかわからない。 –

+0

正規表現のファンではありません...主に私はそれを使う方法がわからないからです。そのフォーラムの仕組みを説明できますか? – TheGateKeeper

+0

@TheGateKeeperは、「hello my friend」と「Goodbye my friend」の間のすべての文字( '+)'を検索します。 Paranthesisはグループ[1](文字列全体ではなく.......)で一致する文字を取得するためのものです –

2

あなたは、単に最初から長さを計算し、

const string startText = "hello my friend"; 
var start = str.LastIndexOf(startText) + startText.Length; 
var end = str.IndexOf("Goodbye my friend"); 
var length = end -start; 
str.Substring(start,length); 
+0

「hello my friend」の長さも考慮する必要があります。あなたのコードは、そのマーカーフレーズも取得します。 –

+0

ありがとう、最初の答えに似ています。 – TheGateKeeper

+0

@Ericええ、それは正しい –

1
string s1 = "find a string between within a lengthy string"; 
string s2 = s1.IndexOf("between").ToString(); 
string output = s1.Substring(0, int.Parse(s2)); 
Console.WriteLine("string before between is : {0}", output); 
Console.ReadKey(); 
関連する問題