2010-05-04 63 views
1

下面的代碼文字和數字將字符串分割成單詞的列表,但不包括數字:拆分文件名進入在Python

txt="there_once was,a-monkey.called phillip?09.txt" 
    sep=re.compile(r"[\s\.,-_\?]+") 
    sep.split(txt) 

['there', 'once', 'was', 'a', 'monkey', 'called', 'phillip', 'txt'] 

此代碼給我文字和數字,但仍包含「_」爲有效字符:

re.findall(r"\w+|\d+",txt) 
['there_once', 'was', 'a', 'monkey', 'called', 'phillip', '09', 'txt'] 

什麼我需要在任何一段代碼來改變與期望的結果結束了:

['there', 'once', 'was', 'a', 'monkey', 'called', 'phillip', '09', 'txt'] 
+0

如果數字與字母字符相鄰,它們是單詞的一部分還是單獨的單詞?例如,「23skidoo」分爲「[」23「,」skidoo「]還是」[「23skidoo」]? – outis 2010-05-04 01:40:43

+0

應該明確分裂爲[「23」,「skidoo」]。我正在處理文件名,我需要找到月份和日期以確定他們需要分配哪些批次。額外的單詞用於確定文件是否是我們想要的文件,或用於需要用戶干預的錯誤文件。 – danspants 2010-05-04 01:47:33

回答

2

這裏有一個快速的方法應該這樣做:

re.findall(r"[a-zA-Z0-9]+",txt) 

下面是另一個:

re.split(r"[\s\.,\-_\?]+",txt) 

(你只需要逃跑的連字符,因爲它在一個字符類特殊的意義)

+0

完美,謝謝!如此簡單但難以實現:) – danspants 2010-05-04 01:42:09

2

對於示例情況,

sep = re.compile(r"[^a-zA-Z0-9]+") 
sea.split(txt) 

應該工作。要將單詞與單詞分開,請嘗試

re.findall(r"[a-zA-Z]+|\d+", txt) 
+0

不要在Python中包含斜槓。它們不是正則表達式的一部分。 (斜槓是Perl中替換和匹配運算符的一部分,但無論出於何種原因,某些PCRE庫似乎希望斜槓的末尾帶有正則表達式) – 2010-05-04 01:45:54

+0

@David:我意識到在發佈後不久。不過謝謝你的提醒。 – outis 2010-05-04 01:47:06

+0

沒問題,只是想澄清任何人的閱讀;-)我會刪除我的downvote現在,但它似乎被鎖定,除非你做另一個編輯 – 2010-05-04 01:54:45