我有一个具有以下模式的字符串。字符串将始终保持不变。只是数字会有所不同
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中做一个方法。任何人都可以帮助我吗?
答案 0 :(得分:3)
这是明显的情况,你应该避免正则表达式,因为它只需要简单的strip
和split
,如下所示:
>>> 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']