Python の文字列操作について助けが必要です (以前の長い質問を以下のこの問題に要約しました)。
ファイルからのこの行の場合:
L20B, CVS=1, HTYP=16, MLV=25
2 番目のフィールドは、CVS または VS です。関連データは行末まで存在します。
CVS または VS で始まる部分を別の文字列に置き換える必要があります。
if CVS found, then replacement is CFIXD(0,1,0) -OR-
if VS found, then replacement is FIXD(0,1,0)
例:
old line: L20B, CVS=1, HTYP=16, MLV=25
new line: L20B, CFIXD(0,1,0)
Old line: T10, M312, P10, Z3710, CL=L1, RH=1 (here, identify RH only and replace with)
New line: T10, M312, P10, Z3710, CL=L1, FIXD(0,1,0)
Old line: T20, M312, P20, Z100, CKR=10000 DV(0,1,0)
New line: T20, M312, P20, Z100, CLS(0,1,0), MU=0.35
So, the replacement string keeps changing with what is found.
CVS or VS (till end of line) is replaced with CFIXD(0,1,0) or FIXD(0,1,0)
CRH or RH (till end of line) is replaced with CVR(0,1,0) or VR(0,1,0)
CFIXD or FIXD (till end of line) is replaced with CVR(0,1,0) or VR(0,1,0)
20 other variants.
Also, is it possible to modify the re.sub() expression to identify something in the search string and carry it over to the replacement string?
For e.g.,
Search for CFIXD(x,y,z) - replace with CVR (x,y,z)
CVS(またはVS)の後のデータは、
CVS=2, HTYP=11, MLV=25
VS=4, HTYP=9, MLV=5 etc.
ご覧のとおり、長さも異なる場合があります。私が確かに知っている唯一のことは、CVS または VS で始まる文字列がその行の終わりまで続くということです。私の知る限り、上記の長さとデータが異なるため、 string.replace は機能しません。
すぐに利用できる Python メソッドはありますか? または、これを行うには小さなルーチンを作成する必要がありますか? VS または CVS へのインデックス (string.find を使用) を見つけて、そのポイントから行末までのすべてを置き換えることができます。簡単な(私には向いていない)正規表現の方法があることは知っています。ありがとう。