2012-12-11 80 views
1

有點沮喪,我不能解決這個問題,但我想定義一個正則表達式,選擇未知數量的單詞(一些間隔,一些合併數字,一些下劃線)。Python正則表達式到行尾

當我說'未知數量的單詞'時,我很樂意將其限制爲10,如果這更現實。 基本上我正在掃描文件名,不要懷疑有超過10個單詞,但不必設置限制就好了。

我迄今爲止最好的是:

tc = re.findall(r'FROM CLIP NAME:\s\s(\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*)', text) 

在哪裏「從剪輯名稱:\ S \ S」將在各行的開頭。

我上面的嘗試完全失敗,因爲\ s讀取換行符和空格,所以也抓取下一行的數據。

+0

如果您可以提供樣本輸入文件和預期輸出,它可以幫助他人更好地理解您的要求。 –

回答

2

如何不使用正則表達式?

檢查,線路是否符合"FROM CLIP NAME: "開始,然後切這個開始關閉並返回字符串的其餘部分:

title = "FROM CLIP NAME: " 
for line in lines: 
    if line.startswith(title): 
     tc = line[len(title):] 

這種迭代線,因此line去總是隻有等到換行。

如果您沒有行(或文件對象)列表,而是文本,請使用for line in text.splitline()

3
FROM CLIP NAME:\s{2}([\w\s]*)$ 

可以使用字符類來定義允許的字符(其也可以是預定義的字符類,像\w\s)和接受任何數量的。這樣你就不會真的在乎它會包含什麼。您也可以使用點號.與字面上的任何東西相匹配。

尾隨$將使正則表達式在最後需要行尾。請注意,對於$的基於行的行爲,您需要爲您的正則表達式使用re.M標誌,否則$將匹配字符串的末尾。

re.compile('FROM CLIP NAME:\s{2}([\w\s]*)$', re.M) 

如果在你的情況下FROM CLIP NAME:是一個靜態前綴,那麼你不應該使用正則表達式。只需迭代線條並剝離eumiro顯示的前綴即可。

+0

酷感謝使用'$','。'的組合。 're.M'解決了我所有的探頭問題!非常感謝 – hemmy