2016-09-09 5 views
0

私のコントロールの外にある別の関数で書き込まれた変数を読み込み、既知の単語の存在を探してから、既知の単語であり、行の最後か末尾にある|区切り文字のいずれかで終了します。 私は書いた簡単なifステートメントに基づいてこの変数に書きたいと思っていますが、現時点では変数に既に何が含まれているかを考慮していません。私が書いているコードはあらゆる種類のエイリアスを使用しているので、私が行っていることを単純化しようとしましたPython String文字列中の既知の単語からスライスする

まず、変数 'devices'は他の場所に書き込まれますが、 私は別の変数 'area'を読んでいます。特に '3'に設定した場合、変数 'devices'に 'box2 | box3'(または 'box3 | box2')という文字列を書く必要があります)、文字列に 'box1'が含まれていない限り、 'devices'の既存の内容は無視できます。文字列内の任意の場所に表示され、他のデータにも追加されますが、常に行の最後で終了するか、または|区切り文字で終了します。だから私は変数全体を読んで、 'box1'の存在を探し、それの行末が|の区切り文字に当たるまで別の変数に多くの文字を読み込む必要があります。 (私はその文字列から余分なbox1_182に必要な 'box1_182 | box6_standard | box9 | | box8_ex_345 box5'

area = "3" 
if area == "3": 
    devices = "box2|box3" 
print devices 

はのは、 'デバイス' は含まれていることを言ってみましょう:私は本当にここに共有することができます

唯一のコードはこれです「デバイス」変数を​​書き込むときに追加して戻します。その変数の他の既存コンテンツについては心配する必要はありません。別の例として、既存のデバイス変数には 'box7 | 'box2 | box3 | box1_182')に書き込む前に、 'box1_345 | box6 | box8_ex_345'、この場合は、 'box1_345'を取得してデバイス文字列に追加する必要があります。

+0

あなたはあなたが持っているもの、2)あなたが必要とするものを明確にすることができますか?次のパイプまで何かを取り出した後に何かを抽出する正規表現は 're.search(r'word([^ |] +) '、s).group(1)'です。しかし、私は文字列に何かを挿入する必要があると感じています。そして、 're.sub'はより適切に思われます。 –

+0

deppermはかなり下の頭の爪に当たっています - 彼のコードは私が必要とする可変部分の単語の始まりを検索します - 問題はテストされた文字列であり、私は引き出して再利用する必要があります、AZ、0-9、 - 、:私がスライスしたい最後の文字列はbox5:sec_er_i:0:| box1:ed_146_rfd:0:| box9:sad_er_:4: box1:ed_146_rfd:0: –

答えて

0

devicesに 'box1'があるかどうかを確認するには、正規表現とinという単語を使用します。その場合は、単に新しいdevices文字列に追加してください。

import re 

devices='box5|box6_standard|box9|box8_ex_345|box1_182' 
area = "3" 
if area == "3": 
    tdevices = "box2|box3" 
    if 'box1' in devices: 
     t=re.search('box1[0-9_:a-zA-Z]*', devices) 
     devices=tdevices+'|'+t.group() 
    else: 
     devices=tdevices 
print devices 
+0

deppermありがとう、私はこれを試したことがあり、ALMOSTは動作します - 最後の読み込み文字列は 'box5:sec_er_i:0:| box1:ed_146_rfd:0:| box9:sad_er_:4:'でした。私が必要としたビットは 'box1:ed_146_rfd:0:' –

+0

が編集され、正規表現が更新されました – depperm

関連する問題