2012-05-04 286 views
0

我有以下代碼塊。我可以在寫入之前有一行刪除特定的字符串嗎?刪除特定字符串

while str(line).find("ii") < 0: 
    if str(line)[0].isdigit(): 
     if str(line).find("No Action Taken") < 0 and str(line).find("Existing IV Retest") < 0: 
      #<----LINE HERE TO REMOVE ANYTHING I SPECIFY------> example anything in brackets [),(,&,&,#,@] 
      f.write(str(line).strip()) 
      f.write(',') 
+0

什麼是'line'如果不是字符串? –

+1

@SethCarnegie:爲什麼? – orlp

+0

@nightcracker問題中的代碼可能不正確,因爲縮進已丟失,然後由編輯該問題的人重新添加。最後一行可能會或可能不在正確的縮進級別。 –

回答

1

你的問題有點神祕,但我認爲你正在尋找正則表達式。

如果你想從一個字符串括號內刪除任何東西:

import re 
line = "hello [delete this] there!" 
line = re.sub(
       r"""(?x) # Verbose regex: 
       \[  # Match a [ 
       [^][]* # Match zero or more (*) characters except (^) ] or [ 
       \]  # Match a ]""", 
       "", line) 

結果:

line == 'hello there!' 
+0

我很抱歉,但我很新的python和正則表達式完全嚇倒了我的廢話。是的,這正是我需要的。但不明白代碼。我已閱讀http://docs.python.org/howto/regex.html上的手冊,但仍不明白。 – fpena06

+0

@ fpena06:我已將正則表達式更改爲已註釋的正則表達式;希望有所幫助。如果你想學習如何構建正則表達式,我建議http://www.regular-expressions.info作爲一個起點。對於上面的正則表達式,請查看http://www.regular-expressions.info/charclass.html。 –

+0

謝謝你! – fpena06

0

假設我理解正確的話:

的正常方式:

for i in [')','(','&','&','#','@']: 
    line = line.replace(i,'') 

的一條線的方式:

line = reduce(lambda a,b: a.replace(b,''), [')','(','&','&','#','@'], line) 

實施例:

>>> line = "[email protected]#*@!)*%^(*%^)@*(#$)@#*$)@#*@#)@$*)@!*#)@#@!)#*%$)$#%$%blah" 
>>> line = reduce(lambda a,b: a.replace(b,''), [')','(','&','&','#','@'], line) 
>>> print line 
blah!*!*%^*%^*$*$*$*!*!*%$$%$%blah 
+0

爲什麼兩次'&'? – jadkik94

+0

這就是他寫的。爲了教學目的,我希望儘可能簡單地進行轉換。 –

+0

是的。對,我剛看到他也是這樣做的。我以爲你寫錯了,我的壞話。 – jadkik94

0

使用line = line.replace('#', '')從字符串中刪除 '#'。您可以對所有要刪除的字符重複該聲明(不是特定的字符順便說一句)。

但是,使用正則表達式(也適用於更復雜的模式)要好得多,可以通過Python中的re包得到。

類似於:line = re.sub(re_pattern, "", line)