2012-10-16 72 views
1

我想從給定文件中刪除以*開頭的所有行。因此,例如,以下內容:正則表達式+ Python - 刪除所有以*開頭的行

* This needs to be gone 
But this line should stay 
*remove 
* this too 
End 

應該產生這樣的:

But this line should stay 
End 

我最終需要做的是以下幾點:

  1. 刪除括號內的所有文字和括號(包括括號/括號),
  2. 如上所述,刪除li以''開始。

到目前爲止,我能夠通過以下方式解決#1問題:re.sub(r'[.?]|(.*?)', '', fileString)。我試了#2,但最後總是刪除的東西幾件事情我不想


解決方案1(無正則表達式)

>>> f = open('path/to/file.txt', 'r') 
>>> [n for n in f.readlines() if not n.startswith('*')] 

方案2(正則表達式)

>>> s = re.sub(r'(?m)^\*.*\n?', '', s) 

謝謝大家的幫助。

+4

那麼你到目前爲止提出了什麼? – kaveman

+0

我最終需要做的是: 1 - 刪除括號和括號內的所有文本(括號/括號括起來),2 - 如上所述,刪除以\ *開頭的行。到目前爲止,我能夠通過以下方式解決#1問題:re.sub(r'\ [。*?\] | \(。*?\)','',fileString)。我爲#2嘗試了幾件事,但總是最終刪除了我不想要的東西。 –

+1

我已將其移至您的問題中,以便閱讀。對於簡單的東西,你可以避免使用正則表達式,並使用內置str方法,如:'if not line.lstrip()。startswith('*')' –

回答

1

你不需要這樣的正則表達式。

text = file.split('\n') # split everything into lines. 

for line in text: 
    # do something here 

讓我們知道,如果你需要更多的幫助。

1

你應該在這裏提供更多的信息。至少,你正在使用什麼版本的Python和一個代碼片段。但是,那就是說,你爲什麼需要一個正則表達式?我不明白你爲什麼不能使用startswith。

我下面的作品與Python 2.7.3

s = '* this line gotta go!!!' 
print s.startswith('*') 

>>>True 
+0

2.7.3,我剛剛開始使用昨天,因此我總的無知。感謝您的建議,我會試一試。 –

+1

@EveraldoAguiar歡迎來到StackOverflow!沒有問題 - 我多次提出了關於我的問題的相同建議。總的來說,嘗試儘可能地提出具體的問題是很好的。併發布您嘗試過的代碼片段。如果您收到錯誤,請包括該錯誤。對於Python,包含您使用的版本通常是一個好主意(因爲3.x和舊版本之間存在顯着差異)。但是,繼續問問題。我想你會發現社區非常願意嘗試和幫助。 –

1
>>> f = open('path/to/file.txt', 'r') 
>>> [n for n in f.readlines() if not n.startswith('*')] 
['But this line should stay\n', 'End\n'] 
+0

這個技巧非常好。感謝您的建議! –

4

使用正則表達式>>

s = re.sub(r'(?m)^\*.*\n?', '', s) 

檢查this demo

+0

這工作得很好!謝謝! –

相關問題