2017-04-26 4 views
-2

を印刷Iは、以下のような文字列がある: INPUT:tempstr =Pythonの2つのデリミタの間のラインから選択した文字列と同じ行の他の列と

fnameêkumarêlnameêashishêaddressêbangalore、indiaêPIN= 888888、nationalityêINDIANêcontactnumber= 888337288、emergencynum = 888222222

すべてのフィールドは、__で区切られているとします。一部のフィールドは "="または "、"で区切られています。 私はPythonで以下のような出力が必要です。 出力:=

fnameêkumarêlnameêashishêaddressêbangaloreTXT、indiaêPINê888888ênationalityêINDIANêcontactnumberê888337288êemergencynumê888222222

は、私は "=" と "」" 交換する機能を交換しようとしていますが、それはアドレス値でも、値フィールドを置き換えます。

def replace_all(text, dic): 
    for i, j in dic.iteritems(): 
    text = text.replace(i, j) 
return text 
reps={", ":"ê", 
    "=":"ê"} 

txt = replace_all(tempstr, reps) 
print txt 
+0

それは不明です。あなたの文字列では、2つのカンマの1つを保持します。これは正常ですか?また、何を試してみるかを示すコードを追加できますか? – Nuageux

+0

説明をよくして、試したことのいくつかのコードを書いてみてください。私はいくつかの悪い設計を疑うため、この出力の目標についても説明します。 – TasosGlrs

答えて

0

使い方正規表現=または,の後にリストに含まれるキーワード fname, lname, address, PIN, nationality, contactnumber,emergencynumの後に置換を除外することができます。すべてのキーワードを追加するだけです必要です。

tempstr=r'fnameêkumarêlnameêashishêaddressêbangalore, indiaêPIN=888888, nationalityêINDIANêcontactnumber=888337288, emergencynum=888222222' 
outputstr = re.sub(r'[=,]\s*(?=fname|lname|address|PIN|nationality|contactnumber|emergencynum)', 'ê', tempstr) 
print outputstr 

出力:

fnameêkumarêlnameêashishêaddressêbangalore, indiaêPIN=888888ênationalityêINDIANêcontactnumber=888337288êemergencynum=888222222 

説明:

[=,] : = sign or comma 
\s*  : 0 or more spaces 
(?=  : start positive lookahead, 
      it makes sure we have one of the following keyword after 
    fname 
    | 
    lname 
    | 
    address 
    | 
    PIN 
    | 
    nationality 
    | 
    contactnumber 
    | 
    emergencynum 
)    : end lookahead 
+0

応答ありがとうございますが、これは完全にハードコードされています。実際のシナリオでは、単一のレポートに合計約200のそのようなフィールドがあります。そのような報告書は異なる名前を持っています。何か一般化する必要があります。 –

+0

@KumarAshish:私はそれが可能ではないことに恐れています。 2つのフィールド間のコンマをフィールド内のコンマと区別する方法はありません。 – Toto

0

ftxt =fnameêkumarêlnameêashishêaddressêbangalore、indiaêPIN= 888888、nationalityêINDIANêcontactnumber= 888337288、emergencynum = 888222222' アウト=再 。 sub(r "(?< ==)( ?P *)(=、)」、R "ê\ 1E"、ftxt)

はデフreplace_all プリントアウト(テキスト)、DIC:。??iに対する 、dic.iteritemsでJ(): テキスト= text.replace(i、j)は リターンテキスト reps3 = { "= E": "E"、 "E、 ":" E"} FOUT = replace_all(うち、reps3)

関連する問題