2013-07-31 39 views
0

我有以下代碼:爲什麼下面的正則表達式在Python中不起作用?

regularexpression = r'([-\w]*\w)? ?: ?([-"\#\w\s_]*\w?);' 
outputfr = re.findall(regularexpression, inputdata, re.IGNORECASE) 
return data 

它應該抓的話,連字符和其他字符,在結束「;」。所以:

(hello-nine: hello, six, seven; hello-five: six eight)將輸出爲[(「你好九」,「你好,六,七」),(「你好五」,「六八」)

如果final-number: "seventy", "sixty", "fifty", forty是用戶的一部分輸入(inputdata),regularexpression並不能捕捉它。我想讓它輸出爲[('final-number', '"seventy", "sixty", "fifty", "forty")]

這是爲什麼?

+0

你能不能解釋一下什麼是正則表達式應該趕上吧。並提供* inputdata的* actual *示例,您期望*匹配的內容以及實際獲得的內容。 – Hamish

+0

我剛剛添加了更多信息,對不起。 – eltb

+0

您的模式不處理輸入字符串中的逗號。 – Blckknght

回答

3

在你的正則表達式,第二組:

([-"\#\w\s_]*\w?) 

需要進行更改,以便它將匹配逗號:

([-"\#\w\s_,]*\w?) 
0

你的榜樣輸入 - >輸出並不一致。在第一種情況下,逗號分隔的項目保持在一起,但在第二種情況下它們是單獨的列表元素。另外,你想去掉括號嗎?引號?通過給出inputdata的實際值並說明你想要返回什麼來澄清(包括剝去引號,括號)。變量永遠不會被分配。

使用.split(";")可能是一個更好的起點......

inputdata = "(hello-nine: hello, six, seven; hello-five: six eight)" 
mylist = inputdata.split(";") 
# here either use regexp or another split, depending on what you want... 
subset = [x.split(":") for x in mylist] 
相關問題