2012-12-22 33 views
-2

我正在研究一個正則表達式,它會以不同的格式獲取價格,因爲我不知道以哪種格式獲取字符串,所以我試圖覆蓋儘可能多的變體正則表達式 - 發現價格

這裏是我想出了

\$\s*?(\d+\.?\d*?)+|usd\s*?(\d+\.?\d*?)+|(\d+\.?\d*?)\s*?usd+|(\d+\.?\d*?)\s*?dollars?+|dollars?\s*?(\d+\.?\d*?)+|(\d+\.?\d*?)\s*?bucks?+|bucks?\s*?(\d+\.?\d*?)+ 

我嘗試了上面幾個例子,並沒有到目前爲止失敗。

任何人都可以想到一個更好的方法來實現這一目標?

+0

您如何收錄您期望的輸入樣本? – fge

+0

輸入是完全隨機的,所以我不能給出具體的例子 –

+0

然後你唯一能做的就是想想你想要捕獲什麼情況並忽略這些罕見的情況。 – nhahtdh

回答

1

這裏真正的答案是通過歸一化的數據來實現。首先刪除除數字之外的所有字符,圓點和(如果您期望負值)連字符。然後你將有一個可以用作數字的字符串。當您有一些可用的測試數據時,請在嘗試編寫正則表達式之前先嚐試規範化。代碼不僅易於編寫,而且運行速度也會更快!

0

我會建議爲每個變體使用單獨的表達式,然後依次測試它們(最可能是第一個),然後應用響應模式鏈。

優點是可維護性。當你需要支持一個新的變體時(考慮到你事先並不知道所有可能的變體),它只是增加另一個成員到鏈中,而不是擺脫你現在建立的複雜的奧妙。