我想捕获括号中提到的 25.43 ,如下所示。我不知道该怎么做。我尝试切片,但它没有提供所需的输出
请注意,此号码是动态的,会经常更改。我只对捕获括号中的数字感兴趣。
a = [u'\xa0\xa0119\xa0\xa0(25.43)%\xa0\xa0']
答案 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'
这将在字符串的括号中找到第一个浮点数。
请注意,您的a
是list
,其中包含字符串,而不是字符串。
答案 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'