0

ここでは、(私にとっては)トリッキーな文字列操作が必要です。次のデータがあります。

Candidate solution = [4, 2, 3]  (this can be any of {1,2,3,4})

以下の基準(より遠い)に基づいて、ラインの一部を交換する必要があります。ここに示されているのは 3 行の例だけです。置換する文字列は、次のコードの < b > 太字タグ内に示されています。< b > タグはオリジナルの一部ではありません。

Orig. Line # 34 ['T10', 'M312', 'P10', 'Z3710', 'CL=L1', '<b>RH=1</b>']
Orig. Line # 37 ['L20B', '<b>CVS=1', 'HTYP=16', 'MLV=25</b>']
Orig. Line # 48 ['L115B', '<b>CVS=1', 'HTYP=16', 'MLV=25</b>']

基準:

if Candidate[i] == 2:
 modified line37 = "L20B, <b>CFIXD(0,1,0)</b>"
 # so, replaced CVS=1, HTYP=16, MLV=25 with CFIXD(0,1,0)

if Candidate[i] == 3:
 modified line48 = "L115B, <b>CCS=1</b>"

if Candidate[i] == 4:
 modified line34 = "T10,M312,P10,Z3710,CL=L1, <b>CVS=1,HTYP=16,MLV=25</b>"

if Candidate[i] == 1:
 modified linexx = whatever comes here

したがって、タスクは、元の行の内容に応じて、特定の行の部分文字列 (または行末までの substr) を " XY" または "CXY " に置き換えることです。

元の行は、以下に示すようにいくつかの形式である可能性があります。

1a. T15,M1,P2,X4'6",CL=3,<b>FIXD(0,1,0)</b>
  --OR--
1b. F15,<b>CFIXD(0,1,0)</b>

したがって、ご覧のとおり、「FIXD()」は項目 1a または 1b のように表示されます。主なことは、置き換えはすでに存在するものに依存するということです:「FIXD」または「CFIXD」または「VS」または「CVS」(16のバリアント)。

さらにいくつかの線種を示します (実際の str は置き換えられ、b/w タグが表示されます):

2a. T55,P3,X3'0",CL=2,<b>G,MU=0.500,STIFF=Rigid</b>
2b. T55,P3,X3'0",CL=2,<b>G,MU=0.500,STIFF=Rigid,GGAP=0.500</b>

3a. T123,JS,X2'0",CFFOR=5000,FTOR=500,WGT=0.5,<b>LS(0.000,None),DV(0.0000,1.0000,0.0000),STIFF=Rigid</b>
3b. L130,<b>CLS(0.000,0.250),DV(0.0000,1.0000,0.0000),STIFF=Rigid</b>


4. T124,X1'0",<b>CUS(1,0,0)</b>


5. T130,X1'0",Y1'0",<b>CRH=1</b>


6. F35,<b>CCS=1</b>


7. L40A,<b>CK=10000,DV(0.0000,1.0000,1.0000</b>

私のアプローチは、XYまたはCXYを使用して部分文字列を識別し、行末まですべてを削除して、新しい文字列に置き換える傾向があります。私は Python を十分に知っているわけではありません。

ご意見ありがとうございます。

4

1 に答える 1