-1

如果它包含有效,我需要将模式查找到字符串中。我无法实现这种模式。我可以通过以下两种格式获得价值,其余的应该被丢弃

s = "1:5.9,1.5:7,2:10,4:18,8:40" 

I need to check that if string s have <value_1>:<value_2> format. 在这里我尝试了匹配和搜索,发现它需要通过编译来完成我想检查字符串是否包含这种格式

<value_1>:<value_2>,<value_3>:<value_4>.... goes on"

 #!/usr/bin/env py
import re
s = "1:5.9,1.5:7,2:10,4:18,8:40"
data  = re.search(r'\d+:\d+',s)
if data:
    print data.group()
4

2 回答 2

5

如果我理解正确,你需要这样的东西。如果请求的模式不在字符串中,您将收到空列表。

代码

#!/usr/bin/env py
import re
s = "1:5.9,1.5:7,2:10,4:18,8:40"
data  = re.findall(r'([0-9.]+):([0-9.]+)', s)
if data:
    print data

输出

[('1', '5.9'), ('1.5', '7'), ('2', '10'), ('4', '18'), ('8', '40')]

编辑 1: 代码处理错误并且只接受正确的值。

#!/usr/bin/env py
import re

s = "1:5.9,1.5:7,2:10,4:18,8:40"

raw_data = re.findall(r'(([0-9]+(.)?(?(3)[0-9]+)):([0-9]+(.)?(?(5)[0-9]+)))+', s)
_temp = ','.join([first[0] for first in raw_data])
data = [(p[1], p[3]) for p in raw_data]

if _temp==s:
    print 'Data is correct'
else:
    print 'Data is wrong'
于 2013-08-26T09:11:13.830 回答
0
import re
rdata = re.compile(' *([0-9.]+) *: *([0-9.]+) *')

s = "   1:5.9,  1.5:7,2: 10,4:18,8:40   "


print all(rdata.match(x) for x in s.split(','))


def get(s):
    li = []
    for el in s.split(','):
        m = rdata.match(el)
        if m:
            li.append(m.groups())
        else:
            return False
    return li

print get(s)

结果

True
[('1', '5.9'), ('1.5', '7'), ('2', '10'), ('4', '18'), ('8', '40')]
于 2013-08-26T09:31:51.580 回答