在Python中选择特定数字

时间:2015-12-09 07:27:14

标签: regex python-2.7

我想捕获括号中提到的 25.43 ,如下所示。我不知道该怎么做。我尝试切片,但它没有提供所需的输出

请注意,此号码是动态的,会经常更改。我只对捕获括号中的数字感兴趣。

a = [u'\xa0\xa0119\xa0\xa0(25.43)%\xa0\xa0']

5 个答案:

答案 0 :(得分:0)

  

是的,除了我用粗体标记的数字外,字符串的结构总是相同的。

然后您可以使用以下正则表达式。

>>> import re
>>> a = [u'\xa0\xa0119\xa0\xa0(25.43)%\xa0\xa0']
>>> re.search(r'\((\d+\.\d+)\)', a[0]).group(1)
u'25.43'

这将在字符串的括号中找到第一个浮点数。

请注意,您的alist,其中包含字符串,而不是字符串。

答案 1 :(得分:0)

我会这样做:

a = u'\xa0\xa0119\xa0\xa0(25.43)%\xa0\xa0'
print re.findall('\\xa0\\xa0119\\xa0\\xa0\(' + "(\d+\.\d+)" + '\)%\\xa0\\xa0', a)

在这里使用(\d+\.\d+)我实际上正在捕捉你提到的动态部分。 \d+表示1位或更多位数。使用括号我实际上正在捕获正则表达式组中的十进制数。

答案 2 :(得分:0)

您可以尝试这样的事情:

>>>b = a[0].encode('ascii','ignore')
>>>b
'119(25.43)%'
>>>b.split('(',1)[1].split(')')[0]
'25.43'

答案 3 :(得分:0)

我首先会找到括号,然后检查里面的字符串是否与浮点数类型匹配

>>> a = '\xa0\xa0119\xa0\xa0(25.43)%\xa0\xa0'
>>> b = re.findall(r"(\d+\.\d+)",a)
>>> b
['25.43']

答案 4 :(得分:0)

正如其他几个答案所示,正则表达式可以很好地运作。您也可以简单地使用find()方法并切片:

In [9]: s
Out[9]: u'\xa0\xa0119\xa0\xa0(25.43)%\xa0\xa0'

In [10]: s[s.find('(')+1:s.find(')')]
Out[10]: u'25.43'