2012-05-04 39 views
2

我遇到了以下python腳本的問題,該腳本從公司內部Web應用程序文本區域中的文本中提取一些選項。正則表達式匹配逗號或換行符,但不是兩個

import re 

text = 'option one\noption two, option three, option four' 
correct = 'option one, option two, option three, option four' 

pattern = re.compile('(\s*[,]\s*)') 
fixed = pattern.sub(', ', text) 

print fixed 
option one 
option two, option three, option four 

print fixed.split(', ') 
['option one\noption two', 'option three', 'option four'] 

這顯然不能分裂「選項一個\ noption兩個」到「方案一」,「方案二」

所以輸入可以作爲

option one 
option two, option three, option four 

最終這將需要轉換到

option one, option two, option three, option four 

它工作正常,如果它是一個逗號

一個逗號,後跟一個換行符

但如果它只是本身就是一個換行符。

回答

4

擴展從[,]你的性格類[,\n],也許?另外,爲什麼不直接在正則表達式上分割,而不是先搜索和替換,然後再分割?這個功能:http://docs.python.org/library/re.html?highlight=re.split#re.split可能來得方便。

+0

're.split'確實是答案。 –

+0

我從來沒有注意到有點奇特的分裂方法!但我不是一個pythonite無論如何... :) –

+0

不錯,'(\ s * [,\ n] \ s *)'工作完美,感謝tdammers :-) – nih

3

你能只是嘗試

(\s*(,|\n)\s*) 

或者甚至可能更好

(\s*[,\n]\s*) 

...我總是忘了,你可以把\n字符類...

+0

啊,對不起,我沒有注意到你先給出了正確的答案,什麼時候發生了'做過的事情',我不知道,因爲這是我的第一個問題... – nih

+0

@nih那不是一個問題。雖然我會說tdammers給了你一個更完整的答案,因爲他們建議你簡單地分開比賽。如果裏面什麼都沒有,那麼我通常會把它給那些得到最少代表的人:D –

2

我到了那裏沒有一個正則表達式:

print [x.strip() for x in text.replace('\n', ', ').split(', ')] 

結果:

['option one', 'option two', 'option three', 'option four'] 

我不是說這是爲您的使用情況下,一個很好的答案。如果您需要添加額外的分隔符,則意味着要爲每個分隔符增加一個額外的.replace()

相關問題