2

私はこのようなCSVを持っています:

43132,000.121.211.254,,NO DATA,office@mail.com,VIEW,2012-11-28 13:17:31
43126,000.123.54.1,,NO DATA,mat.plast@mail.com,VIEW,2012-11-28 13:04:45
43121,000.24.74.155,,NO DATA,sales@mail.mail,VIEW,2012-11-28 12:58:38
43118,000.115.243.218,,NO DATA,guta@mail.com,VIEW,2012-11-28 12:55:59
43116,80006.124.167.204,,NO DATA,mogosanu@mail.ro,VIEW,2012-11-28 12:54:11

そして、私がやりたいのは、notepad ++ 、、、、に置き換えるofficeことmat.plastです。したがって、正規表現が必要です。salesgutamogosanuPRIVATEMAIL

どうすればすべてを一致,させて、@置き換えることができますか

私の考えは次のようなものでした

#\,(.*)\@#

どうもありがとう!

4

3 に答える 3

2
Find what: (?<=,)[^,@]+(?=@)
Replace with: PRIVATEMAIL

これはどのように作動しますか?(?<=,)一致がコンマの右側から始まることをアサートします。[^,@]+カンマやアットマーク以外の任意の文字 (できるだけ多く) に一致します。一致の右側に(?=@)があることをアサートします。@後読みも先読みも実際の一致には含まれないことに注意してください。これが、それらが削除されない理由です。

正規表現エンジンは左から右に一致しようとするため、後読みは省略できることに注意してください。

ルックアラウンドなしで同じことを行うこともできますが、区切り文字を書き戻す必要があります。

Find what: ,[^,@]+@
Replace with: ,PRIVATEMAIL@

(ここでも、両方の文字列の先頭のコンマを省略できます。)

そして、これがあなたのパターンがうまくいかない理由です。まず、Notepad++ は正規表現に区切り文字を使用しないため、周囲の必要はありません#(代わりに、一致するリテラル文字として扱われます)。次に.*、任意の文字に一致します (オプションを選択しない限り、改行を除く)。これには、コンマとアットマークが含まれます。したがって、,は文字列の最初のカンマに一致します。次に、 (その間のすべての値を含む).*まですべてを喜んで消費します。そのため、否定文字クラスを使用して、繰り返し文字から@を除外する必要があります。,

于 2012-11-28T13:40:21.233 に答える
0

/,([A-Za-z]+)\@/HashGuy、あなたが望むものとうまく一致するようです。

于 2012-11-28T13:40:24.837 に答える
0
Find what: ,[^\@,]+\@([^\.]+\.[^,]+),
Replace with: ,PRIVATEMAIL@\1,

これは @ を含むものを変更しませんが、電子メールとは異なります。

于 2012-11-28T13:44:01.293 に答える