如何从带有正则表达式的字符串中获取数字

时间:2016-08-01 11:04:25

标签: python regex

我有一个具有以下模式的字符串。字符串将始终保持不变。只是数字会有所不同

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 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

一种不使用正则表达式的简洁方法:

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

答案 2 :(得分:2)

注意:我认为必须使用正则表达式。

import re

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

答案 3 :(得分:2)

假设您的所有测试字符串共享相同的格式,您可以这样做:

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