またハマった。。。
そろそろハマったシリーズ作ろうかな?
今度は正規表現です。
正規表現で、置換や文字列削除などで
オススメの言語はPerlです。
なんて言ったって、書きやすいこの上無し。
他の言語はコンパイルだったり、手続きが多いのでちっと面倒くさい。
でも、今回はPython上で利用したかったので、Pythonの
re.sub() でやろうとしたのね。そしたらね。
4時間もバトルするハメに・・・(´・ω・)ナゼデショウ?
例えばこういうhtmlソースがあったとします。
<li>Apple</li> <li>Orange</li> <li>Meron</li> <li>Grape</li> <li>Cherry</li>
で、正規表現を使って、タグだけとりはずしたいのね。
「re」モジュールをインポートして、「re.sub」で置換します。
「re.compile」からでもよかったですが、ちっと面倒なので、「re.sub」を使いました。
import re # 変数「html」はどこかのサイトからソースを取得済みだとします。 li_tag = html.read() result = re.sub('<li>(.+?)<\/li>', '', li_tag) # result -> '' print result
でも、これじゃ、置換は全削除となります。
結果はタグを除去した間のテキストがほしい。
先程の正規表現はグループ化しているので
「<li>(.+?)<\/li>」を「$1」に置換すれば良い。
そして、Pythonだと「$1」の記述は「\1」となります。
では、書き直します。
ちなみに下記、説明サイトから引用(7.2. re — 正規表現操作)
(...)
丸括弧の中にどのような正規表現があってもマッチし、またグループの先頭と末尾を表します;グループの中身は、マッチが実行された後に検索され、後述する \number 特殊シーケンス付きの文字列内で、後でマッチされます。文字通りの '(' や ')' とマッチするには、 \( あるいは \) を使うか、それらを文字クラス内に入れます: [(] [)] 。
import re # 変数「html」はどこかのサイトからソースを取得済みだとします。 li_tag = html.read() result = re.sub('<li>(.+?)<\/li>', '\1', li_tag) # result -> '' print result
あり?
でてこないお(´・ω・)?
さーて、ここからたくさんの情報を閲覧しました。
しかし、一向にできる気がしません。
4時間バトりました!4時間!orz
で、結果できたんですけど、下記に変更(;ω; )
import re # 変数「html」はどこかのサイトからソースを取得済みだとします。 li_tag = html.read() result = re.sub('<li>(.+?)<\/li>', '\\1', li_tag) # result -> 'appleorange...' print result
わかりやすいようにぴっくあっぷ
'\1' -> '\\1'
なん・・・・だと・・・!?
こん・・・・だけ・・・だと・・・!!?
うがぁああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ
うわぁああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ
クリリンのことかぁああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ
(;ω;)ツカレタオ
おわり