2012-06-30 85 views
0

我目前使用這個表達式:獨立數字正則表達式?

(\d+) 

,我可以得到問題2串:

「2112343和4.99很多」

OR

「4.99 and alot of 2112343」

我得到這個來自:

[2112343, 4, 99] 

我需要只得到 ... 我怎麼能做到這一點?

+2

它確實得到「僅數字」。也許你的意思是改寫標題? – 2012-06-30 19:32:37

+0

'(?:^ |)(\ d +)(?:$ |)' –

+0

@pst準確地說,它只能得到數字序列,因此'\ d'。 – Gumbo

回答

3

使用環視,你可以限制你的捕捉到全數字未由其他數字或小數點包圍:

(?<![0-9.])(\d+)(?![0-9.]) 

另外,如果你,如果你不希望只匹配獨立的數字(如「T要匹配的123 abc123def):

(?<!\S)\d+(?!\S) 
+1

所以0.1234.0 - >? – 2012-06-30 19:34:21

+1

故意不匹配。 – Amber

+0

@pst'1'和'4'在'[0-9。]'中,因此由於查找方式的原因而不允許進入匹配組的左側和右側。 – Amber

0

試試這個

(?<!\S)\d+(?!\S) 

這隻會匹配整數

1

如果我理解你是對的,你希望將這些數字與內部的一個點相匹配,但是不希望在結果集合中包含這些數字。

我將通過2步接近這一點,首先選擇所有的數字,還有那些以點:

(\d+(?:\.\d+)*) 

然後過濾掉一切,是不是純粹的數字,並使用你的第一個正則表達式,並將其應用到每個從第一步的結果集合的項目:

(\d+) 
+0

我同意這種方法;試圖想出一個過於複雜的正則表達式沒有意義......但是我會使用'[\ d。] +'作爲初始選擇器。 – 2012-06-30 19:34:50

+0

@pst:問題是如果我們想要對待「123」。如通緝或不通過。您的選擇器會匹配它,並在第二步中將其扔掉。我的選擇器會匹配「123」並最終保留它。運營商應該在這裏決定最適合什麼問題...... –

-1
>>>r = re.match("\d+", "23423 in 3.4") 
>>>r.group(0) 
'23423' 
+0

這種解決方案只適用於這種特定情況。我懷疑OP想要一種只適用於這種格式的字符串的解決方案。 –

+0

我不認爲多數民衆贊成在想什麼。這只是他例子中的第一個數字...... –

1

正如我在發表我的評論:

(?:^|)(\d+)(?:$|) 

它將匹配的已完全由數字所有「字」(一個字是由空格字符包圍的非空格字符的字符串和或字符串的開始/結束。)

0

嘗試此

(?<![0-9.])\d+(?![0-9.]) 

它usees圖案

(?<!prefix)position(?!suffix) 

其中(?<!prefix)position是指:不以下前綴匹配位置。

position(?!suffix)表示:匹配位置不在前綴後面。

終於[0-9.]表示:任何數字或小數點。