正则表达式返回< _s而不是十进制值

时间:2012-02-15 19:06:10

标签: python regex

我正在使用Python和正则表达式尝试搜索文本。给定文本文件中的字符串:

line = (<layerThickness> 0.58 </layerThickness>)

我试图将0.58分配给变量L,但输出始终为“&lt; _s”而不是小数值。这就是我一直在尝试的:

L = re.search(r"([-+]?[0-9]*\.?[0-9]+)", line)

感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

也许你只需要调用.group()方法:

import re
line = '(<layerThickness> 0.58 </layerThickness>)'
L = re.search(r"([-+]?[0-9]*\.?[0-9]+)", line).group(0)
print(L)

产量

0.58

答案 1 :(得分:1)

为什么,这是正确的!这就是我所看到的:

>>> import re
>>> line = '(<layerThickness> 0.58 </layerThickness>)'
>>> L = re.search(r"([-+]?[0-9]*\.?[0-9]+)", line)
>>> L.group()
'0.58'

答案 2 :(得分:1)

你的正则表达式很好,你只是没有意识到re.search,如果找到匹配,则返回一个re.Match对象。那是因为re.Match对象不一定只有一个组。您需要使用re.Match.group或re.Match.groups方法返回正则表达式查找的组的实际值。

>>> line = '(<layerThickness> 0.58 </layerThickness>)'
>>> L = re.search(r"([-+]?[0-9]*\.?[0-9]+)", line)
>>> print L
_sre.SRE_Match object at 0x100499dc8>
>>> print L.group()
0.58

顺便说一下,请注意,该组仍然是一个字符串,而不是整数/浮点数,你仍然需要将它强制转换为整数/浮点数,以便在数学中使用它。

另请注意,如果您的行根本不包含匹配项,则L可能为“无”,因此您需要在生产代码中对其进行测试。