🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

置換

置換とは文字列中の特定の文字に対して、別の文字列に置き換えることを指します。

Brackets

Bracketsは、オープンソースで開発されているHTML/CSS/JavaScriptのコードエディターです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

3184閲覧

html内の税抜き価格表記を税込価格表記に一括で書き換えたい

yoshino_hanako

総合スコア1

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

置換

置換とは文字列中の特定の文字に対して、別の文字列に置き換えることを指します。

Brackets

Bracketsは、オープンソースで開発されているHTML/CSS/JavaScriptのコードエディターです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

2クリップ

投稿2021/01/22 00:46

前提・実現したいこと

html修正について。初心者です。

1ファイル内に税抜き価格が20~30個表記されているソースが数百点あります。
それぞれ税込価格に直していかなければいけないのですが、エディタ上の正規表現での置換等を使って、何とか少しでも時短で修正していく方法はないでしょうか…?!

エディタはBracketsを使用しております。
よろしくお願いいたします。

変更前例)
<span>19,800円(税抜)~</span>
<span>13,800円(税抜)~</span>
<span>17,800円(税抜)~</span>

変更後例)
<span>21,780円(税込)~</span>
<span>15,180円(税込)~</span>
<span>19,580円(税込)~</span>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

eneko0513

2021/01/22 04:43

エクセルは使えますか?
CHERRY

2021/01/22 06:49

置き換えたい目的は、何でしょうか? 2021年4月からの「総額表示義務付け」関連でしょうか?
yoshino_hanako

2021/01/25 06:13

エクセルは使えます。 置き換えたい目的はCHERRY様のおっしゃる通り、2021年4月からの「総額表示義務付け」関連です。 当方ECサイトの商品登録や修正の担当しております。 カラーミーにて数百ページ~数千ページの商品ページやグループページが存在しており、それぞれのソース内に質問通りや、いろんな形式で税抜き価格が入ってしまっています。泣
guest

回答3

0

ベストアンサー

要求されていることを「一発で」実現することはエディタでもエクセルでも難しいと思います。
仮に優れたプラグインが存在するとしても、対象が数百あるというのではどのみちエディタでの処理向きではありません。

perlが一番簡単だと思いますね。

perlはいいぞ

windowsなら次の記事に紹介してる方法でperlを使えるようにします。linuxやmacOSなら最初から使えるようになっているはずです。

スクリプトを用意

以下のスクリプトを例えばhenkan.plという名前で作成してカレントディレクトリに保存。

#!/usr/bin/env perl use strict; use warnings; use POSIX; use utf8; sub xprice{ my($price) = @_; $price=~s/,//g; # ,を一旦外す my $price_tax = ceil(sprintf("%0.1f", $price*1.1)); # 税抜→税込。小数点以下切り上げ。計算誤差対策でsprintf。 1 while $price_tax =~ s/(\d+)(\d{3})/$1,$2/; # 3桁ごと,を付け直し return($price_tax); } s/([\d,]+)円(税抜)/xprice($1).'円(税込)'/ge;

実践

コマンドラインで、「ソースが数百点」があるディレクトリに行き、次のように入力。
(↓オプションパラメータ書き間違えていたので先程修正しました。)

perl -i.bak -CSD -pl henkan.pl *.html

すると中身が書き換わり、元のファイルは.bakという拡張子がついたファイル名でバックアップされているはず。

最初はテスト用のディレクトリに幾つかファイルをコピーして実験してみてください。

投稿2021/01/22 09:14

編集2021/01/22 14:52
KojiDoi

総合スコア13692

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyabi_takatsuk

2021/01/22 09:17

ですね、文字列処理はやっぱPerlなんですね。
KojiDoi

2021/01/22 11:19

>文字列処理はやっぱPerlなんですね。 そうそう。 教科書やハウツー系ウェブサイトには往々にして「すでにお膳立てが為された後の整ったデータをいい感じで処理する」レベルの説明しか書かれていませんが、いざ実務に入ると、まさに質問者氏が直面しているような泥臭い前処理/後処理が仕事のかなりを占めるのが現実。 そういう局面でperl以上に小回りのきくツールはなかなかないのですよ。pythonよりもJavaScriptよりもシェルスクリプトよりもバッチファイルよりもpowerShellよりも前に、perlを覚えたほうがいい。
miyabi_takatsuk

2021/01/22 14:18

なるほど・・・! 私は、Movable Typeでニッチな実装しなければ行けない時、 調べて、文字列処理に特化していることを知って、実際にやってみたら、これはすごい・・・ってなりました。 今の時代、一個の言語で全部やれる方法なんてやり方をしようとする方が多いですが、 その言語の得意分野を活かし合う方がいいと思うんですよ。
eneko0513

2021/01/22 16:03

ためになりました。
yoshino_hanako

2021/01/25 06:04 編集

ありがとうございます! perl、まったくの初心者なので上手く行くかわかりませんが、これが実行できればかなり助かりすぎます…! 本当に思い切って知恵を拝借できないか投稿してみてよかったです。
yoshino_hanako

2021/01/25 06:08

ちなみに、初心者過ぎてお聞きするのもお恥ずかしいのですが… >コマンドラインで、「ソースが数百点」があるディレクトリに行き、次のように入力。 以降の個所でつまづいております。 ・コマンドラインで、「ソースが数百点」があるディレクトリに行き とは、コマンドプロンプトにて 「cd (ソース保存してある移動先ディレクトリ) cmd」 と入力→エンタ→ 指定いただいた「perl -i.bak -CSD -pl henkan.pl *.html」を入力しエンタ で間違いないでしょうか…?? 「Can't open *.html: Invalid argument.」と出てきてしまいます。 申し訳ありません、どうぞよろしくお願いいたします。
KojiDoi

2021/01/25 20:30

すみません、windowsのcmdはワイルドカードの展開をしてくれないのでしたね。 cd (ソース保存してある移動先ディレクトリ) の直後、perlの呼び出しを次のように変えてみてください。(ここであらためてcmdを呼び出す必要は有りません) for %f in (*.html) do perl -i.bak -CSD -pl henkan.pl %f
yoshino_hanako

2021/01/26 00:39

待ってください!!!テストファイルでできました!!!!!ええっこんな一瞬で… 衝撃です、感動です…!!!! 本当に本当にありがとうございます!!!
yoshino_hanako

2021/01/26 01:19 編集

私の質問がKojiDoiさんのお目にかかれたのは幸運としか言いようがありません泣 本当にありがとうございます。perl様、必ず今後も継続して勉強してまいります。 大変恐縮なのですが、もう1点形式がありました… <span>17,800円(税抜)~</span> ではなく、 <span>¥17,800</span> という形で税抜き価格が表記されているファイルも見つかってしまいました。 円ではなく頭に「¥」、「(税抜)」がないパターンです。 最後の「s/([\d,]+)円(税抜)/xprice($1).'円(税込)'/ge;」 が、書き換えるべきパターンを見つける文なんでしょうか? ここを書き換えるのかなと思い、調べてみたのですがどうにもこうにも付け焼刃の知識では歯が立たず… 何度も申し訳ありません、どうかご教授願えないでしょうか!?よろしくお願いいたします。
yoshino_hanako

2021/01/26 01:39 編集

失礼しました、 「s/([\d,]+)/xprice($1)/ge;」でいけました!!!! 本当に本当にありがとうございました。泣
guest

0

内容はそのままで、Javascriptで画面が開かれた時に値を取得して書き換えるという手段ではいかがでしょう。

投稿2021/01/22 04:51

eneko0513

総合スコア349

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoshino_hanako

2021/01/25 06:16

ありがとうございます。Javascriptで変換させてしまうという手もあるのですね…!検討してみます、ありがとうございました。
guest

0

IDEだけだと、(税抜)→(税込)に変えるのは、一括置換が可能かと思いますが、
数値の計算までは難しいかと。

Gulpなどのタスクランナーや、Pythonなど、その他の言語で、
コマンドラインで一括して計算や置換をし、ファイル吐き出しが可能かと思いますので、
その方法を検討されてはいかがでしょうか?
(ファイル一個一個やるよりは、ラーニングも含めて時間はかからないかと)

投稿2021/01/22 01:08

miyabi_takatsuk

総合スコア9555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoshino_hanako

2021/01/25 06:15

ありがとうございます。 おっしゃる通り(税抜)→(税込)は一括置換でいけるのですが… 数値の計算、置換のできる言語が色々とあるのですね! 勉強いたします。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問