2015-11-15 30 views
0

我有以下的正則表達式(?x:-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?)正則表達式來攻克一批

first -1.3 second 1.1e-2 third -1e-2 fourth -10 fith -0.1 sixth .3 done. 

但最後一個.3適用於所有數字。

我試圖讓第一組(?:0|[1-9]\\d*)可選,但打破了正則表達式。我怎樣才能使正則表達式適用於所有情況?

回答

1

第一件事是第一件事。你正則表達式是:

-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)? 

你不需要(?x:...)組,因爲你的正則表達式中有沒有空格,當你寫的正則表達式在一個字符串的形式你只需要逃避反斜槓。大多數響應者會知道你的意思,但有時候會有人假設你試圖匹配字面反斜槓。

現在,你需要做的是添加另一個替代整個正則表達式:

-?(?:(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?|\.\d+) 

如果要允許在所有情況下的指數,這樣做:

-?(?:(?:0|[1-9]\d*)(?:\.\d+)?|\.\d+)(?:[eE][+-]?\d+)? 

每個人,在第一次遇到這個問題時,希望有一種更優雅或更聰明的方式,但是沒有。

+0

thans,那就是我正在尋找 – Denis