• ベストアンサー

C#で文字列を抜き出す

C#で”<”から”>”までの間の文字列を抜き出そうとしていますが、間に改行が入ると抜き出す事ができなくなってしまいます。 何かいい方法があったら教えて下さい。 初心者なので質問内容が分かりにくいかもしれませんが宜しくお願い致します。 if (HTML.StartsWith("<")) { endlen = HTML.IndexOf(">"); writer.WriteLine("tag"+"["+"]"); httext[0] = HTML.Substring(0,endlen); HTML = HTML.Remove(0,endlen1); }

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

同じようなコードを書いて、試してみましたが、 間に改行があっても、問題なく実行できました。 1つ指摘しておきたいのは、 Substringは、 Substring(取り出し開始文字位置,文字数) であって、後ろの引数は終了文字位置ではないことです。 0123456 <TITLE> の時 endlenは、6ですが、これは、文字位置を表しているのであって、変数名のように文字数の長さ(length)を表しているのではありません。 従って、 Substringや、Removeで (o,endlen)としていするのは、 <TITLE をあらわしていることになります。 これは、多分意図していることと異なるのではないですか? ちなみに、タグを取り出したいのだから (1,endlen)とした方がいいのかもしれません。 あと、Remove(0,endlen1); は、綴り間違いか、あるいは Remove(0,endlen+1); ではありませんか?

winlook
質問者

お礼

ありがとうございます! そうですかぁ、勘違いしてました・・。 Substring(取り出し開始文字位置,文字数)だったんですね。 まだまだ勉強不足で申し訳ありませんでした ありがとうございました!

その他の回答 (2)

回答No.2

改行コードが含まれていて問題になるのであれば、 検索処理の前に改行コードを 削除または""に置き換えるという処理をいれてみてはどうでしょうか? 頭の悪い方法しか思いつかなくてすみません。

winlook
質問者

補足

頭の悪い方法じゃないですよ~ ご意見いただいて本当に感謝しております。 blackbrainの方法は私も考えたんですが、後々の処理を考えて改行コードを含めて抜き出したいと考えています。 ご回答本当に有難うございます。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

文字列を保持している HTML に、改行を含んだデータは取り込めているのですか? 一行分しか取り込んでいないのだったら ウマくいかないのは当たり前だと思うのですが

winlook
質問者

補足

ご回答有難うございます。 変数の中に改行を含んだ全ての文字列を取り込んでありますので1行分しか取り込んでないと言う事は無いと思います。

関連するQ&A

  • C#における改行を含む文字の探索

    開発初心者です。 HTML上の改行を含む文字列をC#の 「 IndexOf 」 関数で探索するとき どのようにすれば良いのでしょうか? IndexOf(<font size=\"-1\">\n) では成功しませんでした。 ご存知の方がいたら、ご教授ください。

  • 文字列をタブ区切りで出力したい

    HTMLファイルをタグごとに区切って、value属性を持つものには、value=""のダブルクオートの 中に文字列を入れて、以下のように出力させたいと思っています。 <html> <body> <input type="text" name="name" value="出力させたい値"> </body> </html> そのため、以下のクラスを作成しました。 public class Sample { private static final String findValue = "value=\""; private static final int valueLen = findValue.length(); public static void main(String[] args) { String html = "<html><body><input type=\"text\" name=\"name\" value=\"\"></body></html>"; StringBuffer sb = new StringBuffer(html); int tagStart = sb.indexOf("<"); int tagEnd = sb.indexOf(">") + 1; if (tagStart >= 0 && tagEnd > 0) { String tag = sb.substring(tagStart, tagEnd); System.out.println("tag : " + tag); int valueIndex = tag.indexOf(findValue) + valueLen;// パラメータ挿入開始位置 if (valueIndex > valueLen) { String tagLeft = tag.substring(0, valueIndex); String tagRight = tag.substring(valueIndex, tag.length()); String ret = null; ret = tagLeft + "あああ" + tagRight; System.out.println("ret : " + ret); } } } } しかしこの処理だと最初のタグしか読んでくれず、次のタグの呼び出し方が思い浮かびません。 どなたかご助言をお願いいたします。

    • ベストアンサー
    • Java
  • 文字列をタグ区切りで出力したい・その2

    「文字列をタグ区切りで出力したい」というタイトルで質問を投稿させていただきました、satobe566と申します。回答下さった方、ありがとうございます。 が、ここへ来て新たな問題が・・・。 <title>題名</title>とあった時、題名という文字列は、「<」と「>」で囲まれていないので、出力されない状態です。どこにどの処理を入れたらいいのか、 見当がつきません。 すみませんが、ご助言お願いします。 以下、作成したソースです。 public class Sample { public static void main(String[] args) { String html = "<html><title>題名</title><body><input type=\"text\" name=\"name\" value=\"\"></body></html>"; int tagStart = 0; int tagEnd = 0; while (true) { tagStart = html.indexOf("<", tagEnd); if (tagStart == -1) break; tagEnd = html.indexOf(">", tagStart + 1) + 1; if (tagEnd == 0) break; String tag = html.substring(tagStart, tagEnd); String rep = tag.replaceAll("value=\"\"", "value=\"あああ\""); System.out.println("rep : " + rep); } } }

    • ベストアンサー
    • Java
  • 【C#】文字列の最後に改行を入れていく処理

    【C#】文字列の最後に改行を入れていく処理 C#初心者です。 ファイルを一行読み込むごとに、行の最後に改行\nを入れ、最後にその文字列を繋げ、出力したいのですが、やり方がわかりません。 結果は abcdefg hijklmn opqrstu のようになってほしいです。 分かる方いらっしゃいましたら教えていただけると幸いです。 宜しくお願いいたします。

  • 特定の文字列を抜き出す。

    javaでrdfファイルへのURLを抜き出そうと思っています。 具体的にはhttp:からindex.rdfという文字列を 抜き出したいのですが、 String型のlineという変数に a.(http:*************index.rdf)だけ含まれている文字列と b(http:*********foaf.rdf ***************** http:***************index.rdf) のような含まれ方をしている文字列があります。 aの場合はsubstringメソッドを使って httpの現れる場所からindex.rdfが現れる場所をindexOfメソッドで求めて抜き出せばよいのですが、 bの場合最初のhttpから最後のindex.rdfまで読み出されます。 index.rdfのついたhttpから文字列を抜き出す方法は ないでしょうか?お願いします。

    • ベストアンサー
    • Java
  • C#でのワイルドカードを使った文字検索

    開発初心者です。 文字検索をワイルドカードを使って行いたいと考えています。 例えば、 string x = "ABCDEFGHI" という文字列があったとして 「C***G」という文字列(***はワイルドカード)を検索したいとき、 x.IndexOf(C***G)=2のような結果を出力できるような検索方法を探しています。 ご存知の方がいれば、ご教授宜しくお願いします。

  • Perlでの文字列置換に関して

    Perlでの文字列置換についてうかがいます。 文字列中からHTMLタグを排除しようと思うのですが、 タグ部分のみをうまく指定することができず、困っています。 どうか御知恵をお貸し下さい。

    • ベストアンサー
    • Perl
  • ファイル内の文字列検索

    PCに特定のファイルの有無を確認するために、VBで… Sub Main() If system.IO.Directory.Exists("c:\ファイル名") Then Console.Writeline("ファイル名はCドライブにあります") else Console.Writeline("ファイル名はCドライブにありません") としてファイルの存在を確認しています。 もう一歩踏み込んでファイルの中の文字列の有無を確認することはできるでしょうか?

  • フォームで受け取った文字列から

    HTMLタグを取り除くための正規表現はどうするのでしょうか? $xを文字列とすると $x=~s/?/?/? の?部分を教えてください

    • ベストアンサー
    • Perl
  • 文字列に\nを入れたい

    データベースAccessからデータを取得しTextFieldにその取得したデータを表示させたのですが、文字数が長くてTextFieldに収まらなくなっしてしまいました。そこで取得した文字列に新たに\nを入れて改行させようとしています。 String str = "文字列40字以上…" if(str.length >= 40){ ***処理内容*** 文字列が40字以上なら40文字目のすぐ後ろに\nを足して改行させて表示させたい。 ただし、40文字目を区切りとして改行させ表示させる。例)96文字なら3行に表示させるようにする。 } このような処理を行いたいのですが、良い方法がわかりません。アドバイスをお願いします。