8.72. regexpos マッチ位置¶
書式1: regexpos(str,正規表現)
書式2: regexposw(str,正規表現)
指定した正規表現が最長マッチする文字列 \(str\) の部分文字列の開始位置を返す。 文字列の先頭位置は0であることに注意する。またマッチしなければNULL値を返す。 \(str\) もしくは正規表現にマルチバイト文字を含む場合はregexposw関数を使うこと。
利用例¶
importと入力データ(CSV)の準備
1import nysol.mcmd as nm 2 3with open('dat1.csv','w') as f: 4 f.write( 5'''id,str 61,xcbbbayy 72,xxcbaay 83, 94,bacabbca 10''') 11 12with open('dat2.csv','w') as f: 13 f.write( 14'''id,str 151,漢漢あbbbいyy 162,漢あbいいy 173, 184,bあいあbbいあ 19''')
基本例
正規表現 c.*a
に最も長くマッチする部分文字列の位置を得る。
先頭文字の位置は0であることに注意する。
マッチした部分文字列については regexstr
と同じ入力データを使っているので、比較すると分かりやすい。
1nm.mcal(c='regexpos($s{str},"c.*a")', a='rsl', i="dat1.csv", o="rsl1.csv").run() 2### rsl1.csv の内容 3# id,str,rsl 4# 1,xcbbbayy,1 5# 2,xxcbaay,2 6# 3,, 7# 4,bacabbca,2
マルチバイト文字
正規表現 "い.*あ"
に最も長くマッチする部分文字列の長さを得る。
ただし、以下ではマルチバイト文字対応でないregexpos関数を使っているので、
文字数ではなくバイト数でカウントした場合の位置を返している。
1nm.mcal(c='regexpos($s{str},"あ.*い")', a='rsl', i="dat2.csv", o="rsl2.csv").run() 2### rsl2.csv の内容 3# id,str,rsl 4# 1,漢漢あbbbいyy,6 5# 2,漢あbいいy,3 6# 3,, 7# 4,bあいあbbいあ,1
マルチバイト文字2
正規表現 "い.*あ"
に最も長くマッチする部分文字列の長さを得る。
regexposw関数を使うと、正しくマルチバイト文字を扱ってくれる。
1nm.mcal(c='regexposw($s{str},"あ.*い")', a='rsl', i="dat2.csv", o="rsl3.csv").run() 2### rsl3.csv の内容 3# id,str,rsl 4# 1,漢漢あbbbいyy,2 5# 2,漢あbいいy,1 6# 3,, 7# 4,bあいあbbいあ,1