5.43. msed 正規表現による文字列置換

f= パラメータで指定した項目について、 c= パラメータで指定した正規表現に一致する内容を v= パラメータ指定した文字列で置換する。

パラメータ

i= : 型=str , 任意(default=標準入力)

入力データを指定する。

o= : 型=str , 任意(default=標準出力)

出力データを指定する。

f= : 型=str , 必須

置換対象となる項目名リスト(複数項目指定可)を指定する。

c= : 型=str , 必須

置換したい文字列についての正規表現を指定する。
正規表現の使用方法参照

v= : 型=str , 必須

c= パラメータで指定した正規表現にマッチした部分文字列が、
ここで指定した文字列に置換される。
マッチ結果を用いた置換も可能で、指定方法は以下の通り。
erb|$
$` : 置換対象文字列の先頭から、マッチした文字列の直前までの文字列
$' : マッチした文字列の直後から、置換対象文字列の最後までの文字列
$N : N番目の部分マッチ文字列( N>=1 )

A= : 型=bool , 任意(default=False)

このオプションにより、指定した項目を置き換えるのではなく、
新たに項目が追加される。

g= : 型=bool , 任意(default=False)

正規表現にマッチする全ての部分文字列を置換対象とする。

W= : 型=bool , 任意(default=False)

ワイド文字として正規表現による文字列置換を行う。

利用例

importと入力データ(CSV)の準備

 1import nysol.mcmd as nm
 2
 3with open('dat1.csv','w') as f:
 4  f.write(
 5'''customer,zipCode
 6A,6230041
 7B,6240053
 8C,6330032
 9D,6230087
10E,6530095
11''')
12
13with open('dat2.csv','w') as f:
14  f.write(
15'''item,price
16fruit:apple,100
17fruit:peach,250
18fruit:pineapple,300
19fruit:orange,450
20fruit:grapefruit,500
21''')
22
23with open('dat3.csv','w') as f:
24  f.write(
25'''str1
26abc
27abbc
28ac
29''')

基本例

zipCode 項目の値が00から始まる4桁文字列を #### に置換する。

1nm.msed(f="zipCode", c="00..", v="####", i="dat1.csv", o="rsl1.csv").run()
2### rsl1.csv の内容
3# customer,zipCode
4# A,623####
5# B,624####
6# C,633####
7# D,623####
8# E,653####

項目名指定

zipCode の値が00から始まる4桁の数字を #### に置換し、 zipCode4 という項目名で出力する。

1nm.msed(f="zipCode:zipCode4", c="00\d\d", v="####", i="dat1.csv", o="rsl2.csv").run()
2### rsl2.csv の内容
3# customer,zipCode4
4# A,623####
5# B,624####
6# C,633####
7# D,623####
8# E,653####

グローバル置換

zipCode の値が 0 を全て =True にグローバル置換する。

1nm.msed(f="zipCode", c="0", v="-", g=True, i="dat1.csv", o="rsl3.csv").run()
2### rsl3.csv の内容
3# customer,zipCode
4# A,623--41
5# B,624--53
6# C,633--32
7# D,623--87
8# E,653--95

部分置換

item の先頭の fruit を削除する。 先頭一致( ^ )を指定しているので、最後の行の grapefruit は削除されていないことに注意する。

1nm.msed(f="item", c="^fruit", v="", g=True, i="dat2.csv", o="rsl4.csv").run()
2### rsl4.csv の内容
3# item,price
4# :apple,100
5# :peach,250
6# :pineapple,300
7# :orange,450
8# :grapefruit,500

マッチ結果を用いた置換

v= の中で $& を用いれば、マッチした文字列(連続した b )に置き換わる。

1nm.msed(f="str1", c="b+", v="#$&#", i="dat3.csv", o="rsl5.csv").run()
2### rsl5.csv の内容
3# str1
4# a#b#c
5# a#bb#c
6# ac

グローバルマッチとの組み合せ

グローバルマッチにすると、個々のマッチ毎に v= の内容が評価される。

1nm.msed(f="str1", c="b", v="#$&#", g=True, i="dat3.csv", o="rsl6.csv").run()
2### rsl6.csv の内容
3# str1
4# a#b#c
5# a#b##b#c
6# ac

プレフィックス置換

$` にて、マッチした箇所の前の文字列(プレフィックス)に置換される。

1nm.msed(f="str1", c="b", v="#$`#", i="dat3.csv", o="rsl7.csv").run()
2### rsl7.csv の内容
3# str1
4# a#a#c
5# a#a#bc
6# ac

サフィックス置換

$' にて、マッチした箇所の後の文字列(サフィックス)に置換される。

1nm.msed(f="str1", c="b", v="#$'#", i="dat3.csv", o="rsl8.csv").run()
2### rsl8.csv の内容
3# str1
4# a#c#c
5# a#bc#bc
6# ac

関連メソッド