2017-04-01 16 views
0

私の質問は、次のデータのリストについてです。特定の場所で特定の文字を選択する方法

data = ['TNNI3', 'TSHZ3/THEG5', 'ACTR3BP2-', 'BIN1/CYP27C1', 
'-', 'NBPF1/NBPF20', 'ERBB4', '-NBPF20', '-'] 

他のものと組み合わされている場合のみ、「 - 」を選択する必要があります。自立する場合は、選択しないままにする必要があります。

たとえば、「ACTR3BP2-」および「-NBPF20」の「 - 」を選択する必要があり、リストの2つの「 - 」は選択しないままにする必要があります。

誰でもpython3でregexを使ってこれを行う方法を知っていますか?

正しい「 - 」が選択されたら、リストから削除します。 これを行う方法は、re.sub関数を使用して空のスペースに置き換えることです。誰かがこれを行うより良いアイデアを持っている場合。私はそれらを聞いてうれしい!ここ

+0

'-'要素を削除しますか? ['[x for data if x!= ' - ']'](http://ideone.com/Y16Ihf)?または、 '-'を含むがそれと等しくない要素を抽出するだけです。 - [' [xのxの場合は ' - xのx - とx!=' - '] '](http://ideone.com/Lvs4Hs )? –

+0

Python 3正規表現の解決策については私の答えを見てください。 – ferit

答えて

-1
(?:(-)([\d\w]{1,})|([\d\w]{1,})(-)) captures as you wish. 

デモ:このようなhttps://regex101.com/r/IJMPDX/3

と置換:

4ハイフン、コンテンツの残りのための第二と第三のためのグループ、第一及び第四のキャプチャ。私たちは4つのグループをキャプチャし、2番目と3番目のグループのみを取り除いてハイフングループを削除します。

regex = r"(?:(-)([\d\w]{1,})|([\d\w]{1,})(-))" 

test_str = ("-1wdq32e2\n" 
    "2123sdasa-\n" 
    "ACTR3BP2-\n" 
    "-NBPF20\n") 

subst = "\\2\\3" # Captured 4 groups, taking only 2nd and 3rd 

# You can manually specify the number of replacements by changing the 4th argument 
result = re.sub(regex, subst, test_str, 0) 

if result: 
    print (result) 

# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution. 
0

正規表現を必要としない場合は、これを行うより良い方法があります。文字列の比較と置換はRegexを使うよりも速くなります。

import re 

data = ['TNNI3', 'TSHZ3/THEG5', 'ACTR3BP2-', 'BIN1/CYP27C1', 
     '-', 'NBPF1/NBPF20', 'ERBB4', '-NBPF20', '-'] 

for e in data: 
    if "-" in e and e != "-": 
     old = e 
     new = e.replace("-", "") 
     print(old + " >> " + new)