在python中处理字符串

2024-09-28 22:37:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两条线:

s7="ONE : TWO : THREE : FOUR : FIVE 30.1 : SIX 288.3 : SEVEN 1.9 : EIGHT 45.3 :"    
s8="ONE : TWO : THREE : FOUR 155.5 : FIVE 334.7 : SIX 6.7 : SEVEN 44.5 :"

我使用以下代码来解析它:

c=s.count(':')
if c==8:
    res=""
    res=s.split(' : ')
    res = [item.strip() for item in s.split(':')]
    for index, item in enumerate(res):
        print index, item
if c==7:
    res=""
    res=s.split(' : ')
    res = [item.strip() for item in s.split(':')]
    for index, item in enumerate(res):
        print index, item

我得到的结果是

>>> parse(s7)
0 ONE
1 TWO
2 THREE
3 FOUR
4 FIVE 30.1
5 SIX 288.3
6 SEVEN 1.9
7 EIGHT 45.3
8 
>>> parse(s8)
0 ONE
1 TWO
2 THREE
3 FOUR 155.5
4 FIVE 334.7
5 SIX 6.7
6 SEVEN 44.5
7 

如何提取s7中索引4至7和s8中索引3至6的数值?我需要存储这些值,以便稍后将它们写入数据库。你知道吗

我试过几种方法,但都不管用。你知道吗

请帮忙。你知道吗


Tags: inforindexresitemonesplitthree
3条回答

总是这样吗?您可以简单地执行以下操作:

s7="ONE : TWO : THREE : FOUR : FIVE 30.1 : SIX 288.3 : SEVEN 1.9 : EIGHT 45.3 :"
for elem in s7.split(' '):
    try:
        print elem
        total += float(elem)
    except:
        pass
s7 = total
>>> s7
365.6

s8也是这样。你知道吗

可以对每个字符串使用以下正则表达式:

[A-Z][ ]+([\d.]+)

对于每个字符串,您要查找的值将位于第一个捕获的组中(如果不是空的话)。你可以清楚地看到在www.debuggex.com发生了什么。你知道吗

完整代码:

import re

s7="ONE : TWO : THREE : FOUR : FIVE 30.1 : SIX 288.3 : SEVEN 1.9 : EIGHT 45.3 :"

def parse(s):
  res = s.split(' : ')
  matches = [re.search('[A-Z][ ]+([\d.]+)', x) for x in res]
  return [float(x.group(1)) for x in matches if x is not None]

print(parse(s7)) // prints "[30.1, 288.3, 1.9, 45.3]"

你也可以做一个列表理解。你知道吗

假设字符串总是采用您提供的格式,那么这将起作用:

def parse(s):
    results = [float(x) for x in s.split(' ') if x.count('.') == 1]

>> [30.1, 288.3, 1.9, 45.3]

>> [155.5, 334.7, 6.7, 44.5]

此代码说明:

for every `x` in the split string, which I've split on whitespace, 
cast it to a float if x's count of `.` is 1.

在这里使用count()是可行的,因为如果它没有找到任何.的出现,它不会引发任何异常。但是,如果您想使用异常处理,那么index()就是您要找的。你知道吗

相关问题 更多 >