2011-05-10 55 views
0

[這是一個重新編輯的版本。請忽略此問題的過去版本。]正則表達式來識別各種候選法定數字

使用複雜正則表達式的小型python腳本是provided by eyquem,用於標識字符串中的數字並對其進行消毒。測試結果覆蓋了50多個樣本,這裏我不再重複。

問題是,有人可以調整該正則表達式或提供一個新的,使逗號更加理智?

特別是,我希望看到以下4個測試輸入產生相關的輸出。

  • '4,8.3,5' - > '4' '8.3' '5'
  • '44,22,333,888' - > '44' '22,333888' ####請注意,44, 22從來不是一個單一的數字。
  • '11,333e22,444' - > '11,333e22''444'#### 11,333在e22前面被接受,但22,444在它之後不被接受。
  • '1,999人發現代碼「i + = 1999;」在含義上非常清晰,並可能導致少於1999千字節的額外內存消耗;然而,1,999和1999 KB磁盤空間的收益並不理想,尤其是1999年和我們共有超過1,999美元的產品! ' - >'1,999''1999''1999''1'999''1999''1999''1,999'
+0

一些靈感可以在這裏找到http://regexlib.com/DisplayPatterns.aspx?cattabindex=2&categoryId=3 – 2011-05-10 10:05:25

+0

@Fredrik,謝謝你的鏈接。這是一個有用的資源,但我希望有一個更好的方法來在那裏搜索,例如,通過輸入您的輸入和所需的輸出,然後搜索引擎會識別提交的任何正則表達式是否符合您的標準。 – 2011-05-10 13:41:44

回答

0

儘管所有的信息,您的文章實際上是模糊的。對於初學者,你沒有提出任何問題。你想要什麼?

你問如何找到所有可能的匹配?在Perl中,你可以使用

local our @matches; 
/(...)(?{ push @matches, $1 })(?!)/ 

(?!)永遠不匹配,所以它會導致正則表達式引擎回溯到找到另一場比賽,但代碼塊保存它沒有這樣做之前找到。

如果你要求找到任何匹配,那麼解決起來相當容易:不要打擾尋找選項2,因爲選項1將始終匹配選項2匹配的選項。

+0

我編輯了這個問題,使其更清晰。你現在明白它的要求了嗎? – 2011-05-10 07:47:28

+0

我再次編輯了這個問題。現在更重要的是要調整這些要求,以便正則表達式更有用。 – 2011-05-10 13:35:30