2016-08-01 44 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'] 
相关问题