WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:perlでデータのを整えたい

0:[投稿] 初心者 [2004/11/03 01:40 ][環境:わからない わからない]

私はperlを学んでいる途中です。
練習で以下の作業をしようとして、できなくて困っています。

perlで[1]を[2]のようにデータを整える作業をしたいと考えています。
「全角同士で挟まれたスペースの削除(例)中 央→中央」と「全角数字と並んでいるところに,(カンマ)を挿入する(例) 篠崎11→篠崎,11」の2点の作業をしたいです。
何方か、アドバイスを下さいお願いします。

[1]
中 央1丁目591 281 310 218 2丁目602 315 287 227
2丁目522 256 266 179 大字南篠崎1130 559 571 352
本 町831 396 435 301 花 崎1丁目1459 749 710 604

[2]
中央1丁目,591,281,310,218,2丁目,602,315,287,227
2丁目,522,256,266,179,大字南篠崎,1130,559,571,352
本町,831,396,435,301,花崎1丁目,1459,749,710,604


1:[回答] Orange [2004/11/03 04:53 ]

$data =~ s/(?=\b\d)/,/g;        # 1. 数字の始まりにコンマ
$data =~ s/ +(?=,)//g;          # 2. コンマ前のスペース削除
$data =~ s/(?<=\d) +(?=.)/,/g;  # 3. 数字に続き、文字が続くスペースをコンマに置換え
$data =~ s/(?<=.) +(?=.)//g;    # 4. 文字に続き、文字が続くスペースをコンマに置換え

--- 実行結果 ----
中央1丁目,591,281,310,218,2丁目,602,315,287,227
2丁目,522,256,266,179,大字南篠崎,1130,559,571,352
本町,831,396,435,301,花崎1丁目,1459,749,710,604
-----------------

[2]の行末はスペースが残ったままになっているので、#3,#4で(?=.)部分を追加しました。
[1]から[2]への変換は上記の方法のみで可能ですが、2バイト文字の判定をしたい場合はこちらを参照してください。
http://res9.7777.net/CGI-BBS/beginners/beginners_misc/20011031162415.shtml

正規表現はperl言語の中でも特化して奥が深く、非常に面白い部分です。基本的な使い方を覚えるだけでも、多彩な表現が可能になります。
上級者の方、もっと効率の良い置換え方法がありましたらフォローお願いします。

http://www.kt.rim.or.jp/~kbk/perl5.005/perlre.html


2:[回答] Orange [2004/11/03 05:30 ]

訂正)

# 4. 文字に続き、文字が続くスペースを削除


3:[完了] 初心者 [2004/11/04 01:12 ]

Orangeさん回答ありがとうございます。
まだまだPerlをやり始めたばかりでわからないことだらけですが、Perlで早く色々なことができるようにがんばっていきたいと思います。
また、困ったことがあったときはお願いします。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World