メールアドレスが多数含まれた英文があるとします。


このうちメールアドレスのピリオドだけシャープ3つ(###)に置換するには、
正規表現でどのように表現すれば良いでしょうか?

例:
<原文>
This is my E-mail address.
"hello.goodbye@yahoo.co.jp"
thank you.

<置換後>
This is my E-mail address.
"hello###goodbye@yahoo###co###jp"
thank you.

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2008/08/18 16:49:45
  • 終了:2008/08/25 14:48:00

ベストアンサー

id:takepierrot No.2

takepierrot回答回数52ベストアンサー獲得回数72008/08/18 17:24:43

ポイント54pt

ちょっと面倒かもしれませんが、僕ならこのように行います。

(秀丸エディタ使用)

▼1回目の置換

「検索文字が見つかりませんでした」と表示されるまで、繰り返し全置換を行ってください。

・検索文字

([^\.]+)\.([^\.]*)(?=@)

・置換文字

\1###\2

▼2回目の置換

こちらも1回目と同じように、「検索文字が見つかりませんでした」と表示されるまで、繰り返し全置換を行ってください。

・検索文字

(?<=@)([^\.]*)\.([^\.]+)

・置換文字

\1###\2

以上で一応目的は達成できるかと思います。もっと上手な方法もあるかとは思いますが、ご参考になればよろしいかと…。

URLはダミーです。

http://q.hatena.ne.jp/

id:tetlis

やはり、一度に一つのピリオドを置換し、それができなくなるまで繰り返す、

ということになるのですね。

ありがとうございます。

2008/08/25 14:37:10

その他の回答(2件)

id:foobar_777 No.1

foobar_777回答回数78ベストアンサー獲得回数182008/08/18 17:19:18

メールアドレス中の.は2個以上はないとすると以下のような感じでしょうか。

>echo hello.goobye@hoge.co.jp|sed -n "s/\.\([a-zA-Z0-9_-]*@\)/###\1/gp"

hello###goobye@hoge.co.jp

http://www.mnet.ne.jp/~nakama/

id:tetlis

2個以上ある時もありますし、@マーク以降についても置換が必要です。

2008/08/25 14:34:50
id:takepierrot No.2

takepierrot回答回数52ベストアンサー獲得回数72008/08/18 17:24:43ここでベストアンサー

ポイント54pt

ちょっと面倒かもしれませんが、僕ならこのように行います。

(秀丸エディタ使用)

▼1回目の置換

「検索文字が見つかりませんでした」と表示されるまで、繰り返し全置換を行ってください。

・検索文字

([^\.]+)\.([^\.]*)(?=@)

・置換文字

\1###\2

▼2回目の置換

こちらも1回目と同じように、「検索文字が見つかりませんでした」と表示されるまで、繰り返し全置換を行ってください。

・検索文字

(?<=@)([^\.]*)\.([^\.]+)

・置換文字

\1###\2

以上で一応目的は達成できるかと思います。もっと上手な方法もあるかとは思いますが、ご参考になればよろしいかと…。

URLはダミーです。

http://q.hatena.ne.jp/

id:tetlis

やはり、一度に一つのピリオドを置換し、それができなくなるまで繰り返す、

ということになるのですね。

ありがとうございます。

2008/08/25 14:37:10
id:y-kawaz No.3

y-kawaz回答回数1420ベストアンサー獲得回数2252008/08/19 03:04:14

ポイント26pt

純粋な正規表現のみで表現するのは挫折しました…。

以下では@の左側と右側の2回に分けて置換しています。また@の右側は一回では置換しきれないためマッチする限り複数回置換を行っています。

#!/usr/bin/perl
$s='This is my E-mail address.
"hello.good.bye@yahoo.co.jp"
thank you.';

# @の左側のピリオドを置換
$s =~ s/\.(?=[a-z0-9_=\+\.-]*\@[a-z0-9\.-]+)/###/gi;

# @の右側のピリオドを置換
while($s =~ s/(\@[a-z0-9\.\-]+)\.(?=[a-z0-9\.\-])/$1###/i){}

print "$s\n";

↓出力結果

This is my E-mail address.
"hello###good###bye@yahoo###co###jp"
thank you.

http://q.hatena.ne.jp/answer

id:tetlis

メールアドレスの仕様を知らないのですが、@の左側もwhileしないといけないかな、

と思いました。

ありがとうございます。

2008/08/25 14:38:29

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません