[英]find pattern in string using re module
如果包含有效模式,我需要将其转换成字符串。 我无法实现这种模式。 我可以通过以下两种格式获取值,其余的应丢弃
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()
如果我正确理解,则需要这样的东西。 如果请求的模式不在字符串中,您将收到一个空列表。
代码 :
#!/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'
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')]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.