• ベストアンサー

英字列の抜き出し方法

Visual Basicで文章中の英字列を抜き出すプログラムを書きかたがわかりません. •複数個英字列がある場合は複数取得し,文章は複数の場合(改行)も対応できる様にしたいです 例:今日は日本シリーズ,中日vsロッテが行われます.   本日の勝者が日本一となり,Asian seriesの出場権が与えられます. 出力:vs Asian series  宜しくお願いします.

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

  • ベストアンサー
回答No.4

#2 の方のやり方の方がスッキリしてますね・・・。 とりあえず、#1 の方法を VB6 用に書き直しました。 Private Sub CommandButton1_Click() Dim source As String Dim destination As String Dim s As String Dim inAlphabetWord As Boolean Dim i As Integer destination = "" inAlphabet = False source = Me.TextBox1.Text For i = 1 To Len(source) s = Mid(source, i, 1) If "A" <= UCase(s) And UCase(s) <= "Z" Then inAlphabetWord = True destination = destination & s Else If inAlphabetWord Then destination = destination & " " inAlphabetWord = False End If End If Next Me.TextBox2.Text = destination End Sub

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.6

#5です。 言い忘れましたが、先の回答はVB6用です。 .NETには正規表現があるのですが、VB6や VBAには無いので、このようにして使います。

全文を見る
すると、全ての回答が全文表示されます。
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.5

こういう時は正規表現を使います。 Function 英字列抜粋(ByVal 文字列 As String) Dim 正規表現 Dim 一致集団 Dim 一致 Dim 数 As Long ReDim 結果(0) As String Set 正規表現 = CreateObject("VBScript.RegExp") 正規表現.IgnoreCase = True 正規表現.Global = True 正規表現.Pattern = "[a-z]+" Set 一致集団 = 正規表現.Execute(文字列) For Each 一致 In 一致集団     ReDim Preserve 結果(数)     結果(数) = 一致.Value     数 = 数 + 1 Next If 数 > 0 Then 英字列抜粋 = 結果 End Function この関数は英字列を配列で返します。もし、英字が 一つも無い場合はEmptyを返します。 正規表現は非常に有用で、JavaScriptを始め、多くの 言語でも使用されており、表現形式はほぼ同じです。 この方法では特に参照設定の変更などは不要です。 http://msdn.microsoft.com/ja-jp/library/cc392487.aspx

全文を見る
すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

#2です。 一部修正がありますので、 もう一度回答します。 Dim st As String = "" For Each m As System.Text.RegularExpressions.Match In System.Text.RegularExpressions.Regex.Matches(TextBox2.Text, "([A-z]+)") st = st & m.Groups(1).Value & " " Next MsgBox(st) ご参考になれば。

全文を見る
すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

TextBox1に文章があるとして Dim st As String = "" For Each m In System.Text.RegularExpressions.Regex.Matches(TextBox1.Text, "([A-z]+)") st = st & m.groups(1).value & " " Next MsgBox(st) 一例になれば。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

意外と簡単にできてしまいました。 文章で説明を書くよりもプログラムをそのまま載せた方が簡潔になると思うので、 そのまま載せます。 ちなみに、VB.NET です。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim source As String Dim destination As String = "" Dim s As String Dim inAlphabetWord As Boolean = False source = Me.TextBox1.Text For Each s In source If "A" <= s.ToUpper And s.ToUpper <= "Z" Then inAlphabetWord = True destination = destination & s Else If inAlphabetWord Then destination = destination & " " inAlphabetWord = False End If End If Next Me.TextBox2.Text = destination End Sub TextBox1、TextBox2 は MultiLine = True にしています。

pamu11
質問者

補足

ご丁寧な回答ありがとうございます. 今回VB6で書きたいのですが,VB6での書き方を教えていただけないでしょうか.

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ズバリ日本シリーズの行方は!

    ズバリ日本シリーズの行方は! 王手をかけたロッテの優勝(4勝2敗)ですか? 中日の逆転優勝(4勝3敗)でしょうか? 名古屋で中日・ロッテの勝利でロッテが優勝(4勝3敗)でしょうか? その場合の先発は 第6戦:成瀬vsチェンですが、試合展開で総力戦 あれば「第7戦:渡辺vs吉見」 でしょうか・・・         ↓ 楽しい予想(試合展開と優勝チームとMVP)を教えてください!

  • 何通り?

    数学というか算数の問題ですが、 ご教授下さい。 先に行われた、プロ野球のクライマックスシリーズ。 トーナメント表にしてみると、一回戦に2位、3位が 戦う山があり、その勝者がシードとなっている1位と戦い、 さらにその勝者が、同じ山を勝ち上がってきた違うリーグのチームと 戦って日本一を決める図式となっています。 ↓写真の下にトーナメント表(読売新聞より) http://www.yomiuri.co.jp/sports/npb/ さてそこで、このクライマックスシリーズの優勝が決まる までの勝敗を全て当てる場合、全部で何通りあるのかを 聞きたいのです。 今回の場合は、 セ            パ 中日○-阪神×    ロッテ○-ソフトバンク× 中日○-巨人×    ロッテ×-日ハム○ 中日○-日ハム× となりますが、全部での何通りのなかからこの パターンとなったのか教えてください。 よろしくお願いします。

  • 日本語を打ちながら英字もタイプする方法(マック)

    現在Mac PowerBook G4を使っています。日本語は打てるのですが、日本語の文章中に英字を入れたい場合、どのようにすれば打てるのでしょうか。説明が難しいのですが。例えば、「任天堂DS」を英字も含めて「Nintendo DS」とタイプする場合、言語のタブをBritishやUSに変更しない限りそのまま英字が出てこずにへんてこな日本語がタイプされます。ご存知の方お教え頂ければ助かります。

    • 締切済み
    • Mac
  • エクセルでの列の統合について

    エクセルで2つの列を改行を用いて統合させる場合、 =A1&CHAR(10)&B1 とすれば良い事はわかりましたが 複数の列、例えばA列からP列まで改行を用いて結合させたい場合 どのように記述すればよいのでしょうか?

  • 英字の存在意義がわからない

    日本語の場合はひらがなが発音記号も兼ねてますよね? 場合によっては「は」を「わ」の発音で読む場合もありますが、まあひらがなだけでどんな発音かは分かります。 これに比べて英語って英字と発音記号とが別で、英字は漢字のように読み方は決まってないし、発音記号が文章として表に出てくることもない。 英字なんて「エイ、ビー、シー、ディー・・・」と一文字の発音を練習させるくせに、単語になるとそのとおりに発音することが殆どないんだから一体何のためにあるのかが分かりません。 どうせ違う読み方になり、それを確認するには発音記号を調べるしかないなら、英字なんて作らずに、最初から全部発音記号で文章を書くようにすれば良かったんじゃないでしょうか? なぜコロコロと読み方が変わる英字なんて作って、それで文章を書くようにしたんでしょうか? 「Hong Kong」の「g」は発音しないとか、もうね、アホかと。 発音しないんなら書かなくて良いだろと。 なぜ発音記号だけにしなかったんですか? なぜ英字が必要だったんでしょうか? 英語の勉強をしていてイライラして仕方がありません。

  • エクセルで列内自動改行したい。

    エクセルを生まれて初めて勉強しておりますが、セル内での改行についてあらゆるキーワードで検索しましたが、どうしても見つかりませんので質問させていただきます。 困っている事は、例えばセル幅を20文字程度に広げた「A列」に長々と日本語文章を入力したい時、「A列」の範囲内ピッタリでうまく自動的に改行させる方法が知りたいのです。 長々と文章を入力していると勝手に「B列」「C列」と際限なく文章が列を超えてはみ出てしまいます。 因みに、「Excel 2003」を使っております。 以上、何卒よろしくお願い致します。

  • プロ野球・勝手に球界改革案募集

    表題の通りですが、もし貴方が球団関係者・選手会として、どのような改革をしたいでしょうか。 実現可能なものから、絶対ムリだろ!というものまで考えてみてください。 ・球団拡張?縮小?地方進出?1リーグ ・ドラフト、FA、年俸問題 ・プレーオフ、日本シリーズ問題 ・メジャー対策 私なら ●ドラフトを逆ウェーバーにして、シーズン1位チームから指名していく。目玉選手を獲得しようとしてシーズン後半の最下位狙いがなくなる。良い選手が欲しけりゃ、強くなれ! ●ポストシーズン改革。セ・パ1位チーム、交流戦1位チーム、ワイルドカード1チーム(2位以下10球団の最高勝率)の4チームのトーナメント。交流戦1位とリーグ優勝がダブったら、そのチームには1勝のアドバンテージを与え、ワイルドカードを2チーム(セ・パ2位)にする。 プレーオフはセ・パ1位vs交流戦1位、ワイルドカードとし、できるだけセvsパの組み合わせにする。 そして勝者同士による日本シリーズ。 これを昨年に当てはめたら、プレーオフは、 日本ハム(パ1・公1、1勝アドバンテージ)vs中日(繰上げワイルドカード)、 巨人(セ1)vs千葉ロッテ(ワイルドカード)。 これなら去年は中日vsロッテの日本シリーズで、ロッテが日本一だったかも?(笑) 同一リーグ同士の日本シリーズの可能性もあるけど、絶対おもしろいと思うのに。リーグ優勝と交流戦の価値向上と終盤の2位争いが熾烈になるはず。 皆さんなら、どんな改革を考えますか?

  • エクセルである文字列をカウントしたい2

    例えば、sheet1のA列の各セルに、ある決まった文字列が改行されて複数入っています。(1つの場合もあります。) A1 おはよう こんにちは こんばんは ごきげんよう A2 こんにちは ごきげんよう さようなら そこで、sheet2で各文字列がいくつあるか集計したいと思います。 この場合のsheet2は、下記のように表記したいです。 おはよう   1 こんにちは  2 こんばんは  1 ごきげんよう 2 さようなら  1 どうしたら、実現できますか?

  • セパのCSの進出チームが決まりましたが、その対戦から結果を予想して頂け

    セパのCSの進出チームが決まりましたが、その対戦から結果を予想して頂けませんか? ※パリーグ ◇西武とロッテは → 「   」が勝ち抜く ◇「   」とソフトバンクは→ ?が勝ち抜く ※セリーグ ◇阪神と巨人は → 「   」が勝ち抜く ◇「   」と中日は→ ?が勝ち抜く その結果,? VS ? の日本シリーズが行われ、〇〇が日本一に!

  • WORDで英字と日本語の入力行をそろえたい

    WORD2000を使っています。 フォントを日本語MS明朝、英字をCenturyにして使っております。 日本語文章中に英字(Windows)などを入力すると上記フォントの場合、行の最後が英字なしと英字ありの行とでは半角ぐらいずれてしまいます。 書式→段落で「両端揃え」にしてもなおりません。 どなたかいい方法をご存知なら教えて下さい。 宜しくお願いします。