2016-08-01 42 views
1

我有一個字符串,它具有以下模式。字符串將始終保持不變。只是數字會不同如何用正則表達式從字符串中獲取數字

Showing Results (1 – 15 of 96,831) 

我想從該字符串中提取96,831。我想用正則表達式來做這件事。什麼可以是正則表達式?我嘗試過使用兩個正則表達式的方式,但仍未獲取所需的數字。

"Showing Results (1 – 15 of 96,831)".replace(/[a-zA-Z\(\)]+/g, '').replace(/(\d+ – \d+)/g, '') 

其輸出如下。該輸出包含不需要的空格。

" 96,831" 

我想在python中做到這一點。誰能幫我?

+4

你似乎並不在這裏需要任何正則表達式。分割並修剪''''中的最後一個條目。它真的是Python嗎?你的代碼是JS。 –

+0

另外,爲什麼*我想在python中使用這個正則表達式*如果它仍然沒有得到所需的數字*? –

+0

@WiktorStribiżew對不清楚的聲明抱歉。我的意思是我想用python的方式來做到這一點,就好像有人想要舉例說明一樣,他可以用python來表達。 –

回答

3

這是明確的情況下,你應該避免正則表達式,因爲它只是需要簡單stripsplit,像這樣:

>>> s = 'Showing Results (1 – 15 of 96,831)' 
>>> num = s.split()[-1] 
'96,831)' 
>>> num.strip(')') 
'96,831' 

或者,使用str.rstrip

>>> num = s.rsplit(maxsplit=1)[-1] 
>>> num 
'96,831)' 
>>> num.strip(')') 
'96,831' 

但是,如果你堅持要用正則表達式,那麼這種模式可能會爲你做這項工作:

>>> import re 
>>> nums = re.findall(r'\d+,?\d*', s) 
['1 ', '15 ', '96,831'] 
>>> nums[-1] 
'96,831' 

如果你想將它轉換爲float不要忘記更換,.

>>> num 
'96,831' 
>>> 
>>> num = num.replace(',','.') 
>>> num 
'96.831' 
>>> float(num) 
96.831 
+0

如果字符串中包含「hello 6180 9 hello」,則返回「6180 9」(這不應該是正確的?)。所以你使用的'regex'是一種硬編碼的字符串。 –

+0

@KartheekPalepu ...這是一個非常普遍的案例,OP必須爲他的要求添加更多細節,我只是爲他提供了一個通用的解決方案...就是這樣。 –

+0

再加上你的例子與OP的不同,這就是我說的... OP必須提供更多的細節。 –

3

一個又未正則表達式的簡潔的方式:

str = "Showing Results (1 – 15 of 96,831)" 
print str.split(" ")[-1].strip(")") 
2

注:我想正則表達式是必要的。

import re 

print (re.findall(re.compile(u'of ([0-9,]+)'), u"Showing Results (1 – 15 of 96,831)")[0].replace(",", "")) 
2

假設所有的測試串的分享,你可以簡單地做同樣的格式:

>>> import re 
>>> regex = "\d+,\d+" 
>>> pattern = re.compile(regex) 
>>> str = "Showing Results (1 – 15 of 96,831") 
>>> pattern.findall(str) 
['96,831'] 
相關問題