2015-09-24 114 views
-3

帶有大約2000(texthere)括號的xml文件。我需要刪除其中的括號和文本。我試過,但我得到一個錯誤:(Python和正則表達式刪除文件中的括號

import re, sys 

    fileName = (sys.argv[2]) 


    with open(fileName) as f: 

     input = f.read() 
     output = re.sub(r'\(\w*\)', '', input) 
     print fileName + " cleaned of all parenthesis" 

和我的錯誤:

Traceback (most recent call last): 
    File "/Users/eeamesX/work/data-scripts/removeParenFromXml.py", line 4, in <module> 
    fileName = (sys.argv[2]) 
IndexError: list index out of range 

我改變了(sys.argv中[1])...我沒有得到任何錯誤,而且在括號我file.xml沒有得到刪除?

+0

你如何調用腳本?你有沒有嘗試過'print sys.argv'看看它有什麼? – hjpotter92

+0

你傳遞了​​什麼命令行參數? Python索引是基於0的...... – jonrsharpe

+1

這與正則表達式無關。 –

回答

1

既然你調用腳本如下:

python removeparenthesis.py filename.xml 

XML文件名會sys.argv[1]下出現。

另外,你需要在你的模式使用延遲匹配:

r'\(\w*?\)' # notice the ? 

一個更好的模式是:

r'\([^)]*\)' 
+0

我剛剛嘗試過,它似乎進入我的文件,但沒有刪除括號。文件保持不變? – Anekdotin

+0

@Eddwinn您正在打印'filename';而不是替換字符串('output')。 – hjpotter92

1

你有嵌套的括號?

stuff (words (inside (other) words) eww) 

,你將有括號的多組?

stuff (first group) stuff (second group) 

parens中的文本是否有空格?

stuff (single_word) 
stuff (multiple words) 

一個簡單的正則表達式可能是\(.*?\)雖然你會看到,嵌套的括號,沒有被卡住(這是好的,如果你不希望嵌套的括號):

https://regex101.com/r/kB2lU1/1

編輯:

https://regex101.com/r/kB2lU1/2可能能夠處理一些嵌套的parens,但可能仍然會根據不同類型的邊緣情況而中斷。

您需要指定期望的邊緣情況,以便更好地根據需要量身定製答案。

+0

這是一個更容易的一個..只是(datafalse)或(variant)沒有嵌套或空格 – Anekdotin

+0

你的'\ w *'的例子表明你可以有空的'()'parens,並且你想刪除這些。是否正確? – OnlineCop

+0

我沒有空的小括號。有一個包含這兩個的括號0 – Anekdotin