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)
ワイド文字として正規表現による文字列置換を行う。
共通パラメータ¶
i= , o= , assert_diffSize= , assert_nullin= , assert_nullout= , nfn= , nfno= , x= , tmppath= , precision=
利用例¶
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
関連メソッド¶
mchgstr 文字列の置換 : 単純な文字列マッチによる置換であればこのコマンドを利用する。
mcal 項目間演算 : 正規表現を扱う関数がいくつか用意されている。