2012-03-23 4 views
2

私はKindle電子ブックのために作成されたhtmlファイルでいっぱいのフォルダを持っています。画像はKindleのガイドラインに従って、幅と高さで符号化される:私は/検索を作成するために必要なものPerlやRubyのimgタグの次元を置き換えて掛けることはできますか?

<img width="328" height="234" src="images/224p_fmt.jpeg" alt="224p.tif"/> 

は高さが指定された量によって属性の幅を掛け、すべてのイメージタグを処理するスクリプトです(スクリプトにコード化されています)、それらをHTMLファイルに書き戻します。

ので、上記の例のために、私は1.5を掛けたい、このようなスクリプトは私の得意ではないので、感謝ざる

<img width="492" height="351" src="images/224p_fmt.jpeg" alt="224p.tif"/> 

で羽目になると言います。私は特に、コマンドラインからファイルを実行し、htmlを入出力するだけのスクリプトを書く方法が不明です。

私は、コードの肉は

私は助けを感謝理由である(乗算部)間違っている実感
s/<img width="([0-9]+)" height="([0-9]+)" src="(.*?)" alt=".*"/>/'<img width="'.$1*1.5.'" height="'.$2*1.5.'" src="'.$3.'" alt=""/>'/eg; 

ようなものになるだろうと仮定します。

+0

Pythonは大丈夫ですか?または単にperl/ruby​​? – FakeRainBrigand

答えて

1

私はこれを好きです。

import sys, re 

source = sys.stdin.read() 
def multi(by): 
    def handler(m): 
    updated = int(m.group(2)) * by 
    return m.group(1) + str(updated) 
    return handler 

print re.sub(r'((?:width|height)=["\'])(\d+)', multi(1.5), source) 

次に、あなたは<>を使用してのようなコマンドの入力と出力を扱うことができます。

$ python resize.py <index.html> new_file.html 
+1

これは素晴らしいですしかし、画像の幅のプリントアウトのために先頭の引用符を残しているので、タイプミスがある必要があります。 '224p.tif' – Steve

+0

括弧が間違っているため、最初のサブパターンから引用符が外れています。 – FakeRainBrigand

0

nokogiri gemを使用してHTMLを解析し、画像タグを検索し、幅と高さの属性を抽出してから、変更した文書を保存できるように出力します。

詳細はnokogiri tutorial pageです。

+0

ノコギリをインストールしたばかりですが、正しくインストールされているようですが、さまざまなチュートリアルはすべて失敗します。例えば、非常に最初: 'html_doc =鋸山:: HTML( "

氏ベルヴェデーレファンクラブ

は")' は( '予期しないトークンの近くに構文エラー'で失敗 ' ' – Steve

0

あなたはそうです、それは小さなRubyスクリプトで行うことができます。

source = '<img width="328" height="234" src="images/224p_fmt.jpeg" alt="224p.tif"/>' 
datas = source.scan(/<img width="([0-9]+)" height="([0-9]+)" src="(.*?)" alt=".*">/).flatten! 
source.gsub!(data[0], (data[0].to_i * 1.5).to_s) 
source.gsub!(data[1], (data[1].to_i * 1.5).to_s) 

もちろん、完璧とはかけ離れていて、いくつかの欠点があります。

2

あなたはすでに主な正規表現を見つけました。それを調整して言語を決定する必要があります。正規表現をHTMLで使用するのは最適ではありませんが、これはやや簡単なので大丈夫でしょう。

perl -pi.bak -we 's/<img width="([0-9]+)" height="([0-9]+)"/q(<img width=") . 
    $1*1.5 . q(" height=") . $2*1.5 . q(")/eg;' yourfile.html 

注シェルは引用と競合するコマンドライン上で一重引用符を使用して以来、q(...)を引用代替の使用。

厳密に一致させる必要があると感じない限り、変更していない部分には触れる必要はありません。この部分は、置換によって変更されないままになる

(?=\s*src=".*?"\s*alt=".*?"\/>) 

:そうした場合、あなたは先読みアサーションを追加することができます。

関連する問題