• 締切済み

正規表現でテキスト処理をしてDBに戻す

プログラミングもrubyも初心者です。 2008121407030202,14(1,2)13,4(3,8,9,15)7,12-(5,6,11)10 2008122109050607,(*3,6)12,4(1,13)-(7,11)-(8,9)5=2 10 2009011008010309,3,8,13,9(1,12)(2,6)(10,7)(4,11)5 ↓ 2008121407030202,14,(1,2),13,4,(,3,8,9,15,),7,12,-,(,5,6,11,),10, 2008122109050607,(,*,3,6,),12,4,(,1,13,),-,(,7,11,),-,(,8,9,),5,=2, ,10, 上段のようなテキストを下段のように数字ごとに区切ってDBに戻したいと考えています。rubyに読みこんで正規表現でどうにかして配列に入れていくのかと思いますが どこから手を付ければいいか取っ掛かりが分かりません。 考え方や参考になるサイトでも結構ですのでご教授ください。

  • Ruby
  • 回答数2
  • ありがとう数0

みんなの回答

  • ki073
  • ベストアンサー率77% (491/634)
回答No.2

既にnotnotさんが回答されていますが、記号が続いている部分がうまくいっていないようです 数字が連続する場合はまとめてカンマをつけ、その他の文字は一文字ずつカンマを入れています。 改行の扱いや文字列の最後の扱いは分かりませんが、近いのではないかと思います。 str="文字列" str.gsub(/(\d+|.),?/){|s| $1+","} ところで、何のために区切るのでしょうか? ちょっとおせっかいかな。

  • notnot
  • ベストアンサー率47% (4851/10265)
回答No.1

まずは何をしたいのか明確にすることからです。 数字と記号の間にカンマが無い場合にカンマを入れるという事かと思ったけどそうでもないようで、 結果の1つ目の括弧の後にカンマが無いですね。 これが書き間違いで、「数字と記号の間にカンマが無い場合にカンマを入れる」ということであれば、 a="対象文字列" b=a.gsub(/\d+/,",\\&,").gsub(/,+/,",").gsub(/^,/,"") ですかね。数字の前後にカンマを入れて、その後で、連続するカンマと、行頭のカンマを処理します。

関連するQ&A

  • ruby 配列の中の正規表現は比較に使える?

    数万行あるテキストファイルの中を数百パターンくらいの正規表現で サーチするRubyスクリプトを作成しようとしていますがうまくできません。 どなたかお知恵を拝借させてください。 以下の流れで作ろうとしています。 「 ファイルを一行GETして、その行が事前に定義した配列内の正規表現に合致していればprintする。 次の行をGETして、最初からた正規表現の配列を比較して、合致していればprintする。 テキストファイルが終わるまで、繰り返し 」 何分初心者なもので…、他のやり方があれば教えていただきたいです… ヨロシクお願いしますm(__)m

    • ベストアンサー
    • Ruby
  • 正規表現中の()について

    正規表現中の()について 繰り返し正規表現を行い、マッチ部分を配列に入れる場合の疑問です。 今回、while文を使わずに書いてみようとしています。 #3個以上数字が連続していたら、配列へ入れる。…(1) my @data = ( $str =~ /\d{3,}/g ); #3個以上連続している、同じ文字を取り出して、配列へ入れる。…(2) my @data = ( $str =~ /(.)\1{2,}/g ); 1つめのほうは期待通りに動きました。 が、2つめは正規表現内の()で囲まれた範囲しか、配列に入ってくれませんでした…。 具体的には、$str='AAABBB'なら、 @data='A','B'になってしまいました。(AAA,BBBを配列に入れたい) たぶん、while文と$&を使えば書けそうだとは思いますが、 今回は、この書式で期待通りに動かす方法を知りたいです。 AAA,BBBを配列に入れるにはどのように書けばよいでしょうか? どうか、ご教授ください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 正規表現について

    /^R|ruby$/ 上記のような正規表現があったとします。 この正規表現の【|】の判断がわかりません。具体的には、/^ $/という記述から 対象の文字列の先頭がRかrのどちらかで以降がubyと続く文字列にマッチという 意味だと解釈しているのですが違うのでしょうか? 具体的にはRubyという文字列かrubyという文字列の二つのうちどちらかにしか マッチしないとおもっていたのですが、 rrubyという文字列やRrubyという文字列にもマッチします。そもそもこの場合のR|rの箇所ですが、これはRかrのどちらかが先頭にあり 二文字目からはubyという文字列がつづきますよ。という正規表現ではないのでしょうか? かなりこまっています。 識者のかたご教授ください。

  • 正規表現について

    こんにちは 正規表現を勉強中のものです 数字がカンマで連結された文字列(例:352549,352998,352933,352698,28309)を 調べる為の正規表現がわからなく困っております。 例の数字部分に、数字とカンマ以外が入っていたらfalseを返すようにしたいのですが、 「^[0-9\,]+$」 で対応できるかと思ったのですが、思い通りに行かず困っております。 わかる方がおられましたら、ご教授お願いできますでしょうか。 よろしくお願いいたします。

  • 正規表現について教えてください。

    正規表現について教えてください。 JavaScriptでプログラミングを行っています。 その中で文字列に対しゼロサプレスを行いたいと思い 調べた結果、正規表現を使用する以下のコードで 実現可能なことが分かりました。 val.replace(/^0+([0-9]+.*)/, "$1") コードを記述し実行すると確かに可能なのですが 正規表現を調べてみても何故これでゼロサプレスが可能なのか よく理解できませんでした。 申し訳ありませんが初心者でも理解できるように説明して頂けないでしょうか。 宜しくお願いします。

  • 正規表現文字列をDB登録

    正規表現に詳しくないことと、PHPも携わったばかりなので、苦戦しています。ご教授いただけると助かります。 以下のようなことをやろうとしています。 1.フォームで入力された正規表現を文字列としてDBに登録していきます。 例{http://[w-.]*test_site.jp}i 2.登録データを取り出して、preg_replace()を使いたいです $url_text = {http://[\w\-.]*test_site\.jp}i $db_data ←1のデータ(配列になってます) preg_replace($db_data, '', $url_text, -1) そうすると、$db_dataの中身は\がないために、エラーとなります。 Warning: preg_replace(): Compilation failed: range out of order in character class at offset 10 DBから取得した後に、変換するような関数などあるんでしょうか。 それとも他の方法を探したほうがよいのでしょうか。 一致したものを省きたいような処理なのですが・・・。 ためしにpreg_quote()をかけてみましたが変な風に置換されてダメでした。 うまく説明もできなくて申し訳ないですが、何か良い案ありますでしょうか。 必要であれば、補足いたします。 ぜひお願いいたします。

    • ベストアンサー
    • PHP
  • 正規表現の初心者です

    正規表現初心者です。 なぜ、 [0-9]+ という正規表現が下記の112にあたらないのでしょうか? 0-9(数字)の一文字以上の繰り返しなので、複数桁の数字にマッチすると思ったのですが・・。 echo 112|grep -e "[0-9]+" > (マッチせず)

  • 正規表現で

    正規表現で 8文字以上、15文字以内で1文字以上の英語(大文字小文字どちらか一方で可)と数字が含まれている表現を考えているのですが、思いつきません。 [0-9a-zA-Z]{8,15} だと全て数字・英語でも通ってしまうので、困っています。 どなたか詳しい方、ご教授ください。

  • Rubyにおける正規表現(一致しない)

    Rubyを使って、テキスト処理をやっています。 どうしても、うまく行かないところがあります。 サジェスチョンをお願いします。 正規表現にて、 2つの条件フラグが成立していて、かつ、特定の文字列を含まないという条件です。 1行の内容は、textに入っています。 if (myFlag1==1) && (myFlag2==1) && (!/abc def/) then xxxxxxxx end (!/abc def/)は、perlでの表現です。Rubyでは、少なくとも (!/abc def/=~text) かな、と考えましたが、ダメでした。 (/abc def/!=text) でも、だめでした。 宜しくお願いいたします。

  • perlの正規表現について

    perl初心者です。 早速ですが質問です。 複数のファイルが存在するフォルダ内にて、「~.abc.txt」というテキストファイルのみを 読み込みたい場合はどのように指定すればよいのでしょうか。 #open (F,○○)という表記になるかと思うのですが、 #適当な正規表現が分からず苦労しております。 お分かりになる方いらっしゃいましたら、ご教授してくださいませ。 以上です。 宜しくお願いいたします。