我需要一個正則表達式,讓我分裂在C#以下字符串:分割串入組,正則表達式
$ 1.89糙米 - 16 03/01 - 03/07 1.29
弄成這個樣子:
- 組1:糙米 - 16
- 組2:03/01 - 03/07
- 組3:1.29
是否有可能通過正則表達式來實現?
我需要一個正則表達式,讓我分裂在C#以下字符串:分割串入組,正則表達式
$ 1.89糙米 - 16 03/01 - 03/07 1.29
弄成這個樣子:
是否有可能通過正則表達式來實現?
在你的情況,我認爲正則表達式會比分裂更好。
如果是原來的價格(產品 - 數量)(日期範圍)(銷售價格),你可以嘗試像
\$?\d+\.\d{2} ([A-Za-z ]+- *\d+) +(\d{2}/\d{2} *- *\d{2}/\d{2}) +\$?(\d+\.\d{2})
標題&數量在拍攝第1組,日期範圍內第2組,新組3中的價格。
說明:
\$?\d+\.\d{2}
:價格,可選的美元符號,正好兩位小數(爲美分)。如果你想允許'$ 1'(即沒有小數位),那麼相應地修改。([A-Za-z ]+- *\d+)
對象名稱和數量(用連字符分隔)。你可能希望修改這個正則表達式,這取決於你將得到的預期名字(也許它們不僅僅由字母和空格組成)。(\d{2}/\d{2} *- *\d{2}/\d{2})
日期範圍。我不知道你的是月/日還是日/月,但根據你的意願,如果你願意,你可以使你的正則表達式更獨特(例如,數字日期是([012]\d|3[01])
,一個月只能從1到12) 。\$?(\d+\.\d{2})
saleprice。您是否嘗試過使用類似regexpal的東西?使您可以輕鬆測試如何過濾您感興趣的數據。右上方有一堆提示,它基本上描述瞭如何編寫正則表達式...
首先我們要捕獲價格,但我們不」關心它,因此?
忽略組:
(.*)
:
(?:\$\d+\.\d+)
因爲我們知道第三部分應該是什麼樣子,我們感興趣的第一部分可以在中間吞噬什麼
接下來我們要匹配那個日期r安格:
(\d{2}/\d{2} ‐ \d{2}/\d{2})
最後我們希望有一個浮點數:
(\d+\.\d+)
所以在最後,這樣的事情應該工作:
(?:\$\d+\.\d+) (.*) (\d{2}/\d{2} ‐ \d{2}/\d{2}) (\d+\.\d+)
你需要躲避反斜槓包括在C#
(\$\d\.\d{2}) (.*?) (\d{2}/\d{2} - \d{2}/\d{2}) (.*)
這適用於你的例子。它可能需要改善,如果您有任何更多的數據變化
(\$\d\.\d{2}) - Match the price $0.00
- If prices can be more than $9 then you'd need to
make this match one or more (\$\d+\.\d{2})
(.*?) - Lazy match everything till the next group
(\d{2}/\d{2} - \d{2}/\d{2}) - Match the date range
(.*) - Match what ever is left
您也不妨把起始和終止行限制,如果你從一個文本文件中讀取這些一堆。
/^\$\d*\.\d{2,}\s([^-]+\s[-]\s\d+)\s(\d{2}\/\d{2}\s[-]\s\d{2}\/\d{2})\s(\d*\.\d{2,})$/
組1:糙米 - 16
組2:03/01 - 03/07
第3組:1.29(還將匹配0.29和0.29)
嘗試
(\$\d+\.\d+)\s(.*?)\s(\d{2}/\d{2}\s-\s\d{2}/\d{2})\s(\d+\.\d+)
(\$\d+\.\d+)
在美元的價格相匹配
(.*?)
產品名
(\d{2}/\d{2}\s-\s\d{2}/\d{2})
匹配的時間範圍
(\d+\.\d+)
匹配 匹配第二個價格
我注意到,在您的例子減號(-
)使用不同的字符代碼爲標準減號。因此,我的正則表達式不想工作,直到我用正常的替換你的「 - 」。
是的,可能。你試過什麼了? – DNA 2012-02-21 23:17:22
分裂的邏輯是什麼? (和1.89美元發生了什麼?)說,(價格標題 - 數量(?))(日期 - 日期)(價格)? – 2012-02-21 23:19:41
看起來像(原價)(標題) - (數量)(日期範圍銷售價格)(銷售價格)給我。約翰,這是否準確? – 2012-02-21 23:22:35