繁体   English   中英

使用regex从Python中的字符串中提取数字

[英]Extracting number from string in Python with regex

我想从字符串中提取并打印变量数'-34.99':

myString = "Test1 [cm]:     -35.00/-34.99/-34.00/0.09"

字符串中的值将更改。 我怎么能用Python中的正则表达式做到这一点?

提前致谢

非正则表达式解决方案是:

myString = "Test1 [cm]:     -35.00/-34.99/-34.00/0.09"  
print myString.split("/")[1]

在这里测试此代码。


正则表达式解决方案之一是:

import re 
myString = "Test1 [cm]:     -35.00/-34.99/-34.00/0.09" 
print re.search(r'(?<=\/)[+-]?\d+(?:\.\d+)?', myString).group()

在这里测试此代码。

说明:

(?<=\/)[+-]?\d+(?:\.\d+)?
└──┬──┘└─┬─┘└┬┘└───┬────┘
   │     │   │     │
   │     │   │     └ optional period with one or more trailing digits
   │     │   │
   │     │   └ one or more digits
   │     │
   │     └ optional + or -
   │
   └ leading slash before match 

对于这样的事情,re.findall效果很好:

>>> import re
>>> myString = "Test1 [cm]:     -35.00/-34.99/-34.00/0.09"
>>> re.findall(r'([+-]?\d+\.\d+)',myString)
['-35.00', '-34.99', '-34.00', '0.09']

您可以通过列表理解直接获取浮点数:

>>> [float(f) for f in re.findall(r'([+-]?\d+\.\d+)',myString)]
[-35.0, -34.99, -34.0, 0.09]

或者第二个是这样的:

>>> re.findall(r'([+-]?\d+\.\d+)',myString)[1]
'-34.99'

问题是你会接受多大的文字浮点数? 有些没有小数点? 指数?

>>> myString = "Test1 [cm]:     -35.00/-34.99/-34.00/0.09/5/1.0e6/1e-6"  

哎哟! - 正则表达式越来越难了。

实际上,使用Python的字符串操作可能会更好:

>>> ''.join([s for s in myString.split() if '/' in s]).split('/')
['-35.00', '-34.99', '-34.00', '0.09', '5', '1.0e6', '1e-6']

你可以用同样的方式获得第n个:

>>> n=2
>>> ''.join([s for s in myString.split() if '/' in s]).split('/')[n]
'-34.00'

然后所有奇怪的案例都在没有更难的正则表达式的情况下工作:

>>> map(float,''.join([s for s in myString.split() if '/' in s]).split('/'))
[-35.0, -34.99, -34.0, 0.09, 5.0, 1000000.0, 1e-06]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM