• 締切済み

特定の文字列を削除

こんにちは perlで特定の文字列からその後ろをすべて 削除したいのですが、うまくできなくて質問します。 Ex)123.12abc   ⇒123.12 012.123abc   ⇒012.123 123.1234|| ⇒123.1234 上記のようなデータの少数点までの数字の後ろにabc、||、半角、全角スペースなど文字列があります. 少数点までの数字の後ろの文字列すべてを削除したいですが、 特定の文字列からその後ろにある文字列全てを指定する方法(正規表現)はありませんでしょうか? どうかご存知の方、教えてください!! よろしくお願いいたします。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.7

実験すればわかるけど, 可能なら「0 を足す」のが最も簡単ですぜ>#6.

  • sample_
  • ベストアンサー率76% (20/26)
回答No.6

小数点付きの数字のみにしたい時は… 正規表現を /(\d+\.\d+)/ として $1にアクセスすればよくて ↓さんぷるこーど。  =========================================== use strict; use warnings; while(<DATA>) { chomp $_; /(\d+\.\d+)/; print "str:", $_, "\t-> ", $1 , "\n"; } __DATA__ 123.12abc 012.123abc 123.1234|| =========================================== 整数のみも対応したければ 正規表現を /(\d+(\.\d+)?)/ として $1 にアクセスすればよいですね ↓さんぷるこーど。 =========================================== use strict; use warnings; while(<DATA>) { chomp $_; /(\d+(\.\d+)?)/; print "str:", $_, "\t->",$1 , "\n"; } __DATA__ 123.12abc 012.123abc 123.1234|| ===========================================

  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.5

こういう事ですね? 『文字列の先頭に、小数点付数値と解釈できる内容が入っています。 数値の一部とみなせない後続文字を削除したいです。』 if( $text !~ s/(\.\d*).*$/$1/s ) {  die("入力がおかしいよ。\n"); } print "$text を認識しました。\n"; # 小数点の無い整数には対応できません。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

例の 'abc' はどこにいったんだろう. さておき, いろんな方法があって ・s/\|\|.*//; でつぶす ・m/(\d+\.\d*)\|\|/; で取り出す ・(split(/\|\|/))[0] で「最初の項目」を取り出す ・+0 で強制的に数値に変換する などは思い付く.

  • Suzi
  • ベストアンサー率38% (130/334)
回答No.3

Tacosasさんがおっしゃっているように意味が分からないです。 最初では >上記のようなデータの少数点までの数字の後ろにabc、||、半角、 >全角スペースなど文字列があります. >少数点までの数字の後ろの文字列すべてを削除したいですが、  なので、文面から最初の小数点「 . 」以降を消したいと読めます。  が、 Tacosasさんへの補足では、 >'||'からその後ろまでを削除したいということです。  小数点は何処へ行ってしまったのでしょうか?  || と それ以降を削除でしたら、 $data =~ /^(.+)?\|\|/; ではどうでしょう。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「少数点までの数字の後ろの文字列すべてを削除したい」って, 何がしたいのか理解できないんだけど.... 「少数点」は「小数点」のことだと思っていい? でそうだとしても, 例えば一番上の 123.12abc の例だと, 「小数点までの数字」ってのは「123」だよね. 「その後ろの文字列すべてを削除」って言われても「1」より後ろなのか「2」より後ろなのか「3」より後ろなのかがわかんない. そして, 挙がっている例ではこのいずれでもない. ということで, やりたいことを「正確に」書いてください.

ththkek
質問者

補足

ごめんなさい。 質問がおかしかったです。 たとえば'123.1234||abcd'のような数値のあとに文字列がつく場合 '||abcd'を削除し、'123.1234'にしたいです。 数値の後に付く文字列は'||'のあとにくる文字列が'abcd'ではなく、 ’edfg’’hijk’みたいに特定できないため、'||'からその後ろまでを 削除したいということです。

  • Suzi
  • ベストアンサー率38% (130/334)
回答No.1

小数点の前が必ず数字のみという条件で、その中の小数点以降を全て削除なら、 $data = '123.1234|| ⇒123.1234'; $data =~ /^(\d+)?\./; print $1; で、どうでしょうか。

関連するQ&A