我想从字符串中提取并打印变量编号'-34.99':
myString = "Test1 [cm]: -35.00/-34.99/-34.00/0.09"
字符串中的值将更改。 我怎么能用Python中的正则表达式来做呢?
提前致谢
答案 0 :(得分:13)
非正则表达式解决方案是:
myString = "Test1 [cm]: -35.00/-34.99/-34.00/0.09"
print myString.split("/")[1]
测试此代码here。
正则表达式解决方案之一是:
import re
myString = "Test1 [cm]: -35.00/-34.99/-34.00/0.09"
print re.search(r'(?<=\/)[+-]?\d+(?:\.\d+)?', myString).group()
测试此代码here。
说明:
(?<=\/)[+-]?\d+(?:\.\d+)?
└──┬──┘└─┬─┘└┬┘└───┬────┘
│ │ │ │
│ │ │ └ optional period with one or more trailing digits
│ │ │
│ │ └ one or more digits
│ │
│ └ optional + or -
│
└ leading slash before match
答案 1 :(得分:1)
对于这样的事情,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]