我想从字符串中提取并打印出变量号码“-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
.split('/')[-3]
。这样可以获取倒数第三个元素,避免描述中包含“/”字符的影响。 - jon对于这样的情况,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=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]
myString.split()[-1].split("/")[1]
,尽管它在其他情况下也会失败。也许可以使用 map(float, myString[myString.find(':')+1:].split("/"))
?只有一个例子可供参考,很难知道应该有多普遍,或者我们可以依赖哪些不变量。不过,我确实喜欢使用分隔符的想法,而不是编写复杂的正则表达式来处理所有情况。 - DSM
/
分隔的列表中的第二个数字吗? - João SilvamyString.split()[-1].split("/")[1]
- DSM