【问题标题】:Split a string with several parameters拆分具有多个参数的字符串
【发布时间】:2016-07-17 05:18:33
【问题描述】:

我有很多字符串的文件,例如:

V004_2aB181500181559aB182000191659

V001_2a194300194359a203100203159

每个字母代表一个成员以及在其出勤时间之后。

这意味着在第一行,成员 a 和 B 来自 [18h15min00sec - 18h15min59sec][18h20min00sec - 19h16min59sec] ...

我想创建一个数组来汇总所有出席情况,例如:

table = [Member,Start_hour,End_Hour]

【问题讨论】:

  • V004_2aB181500181559aB182000191659 中的 aB 是一个成员还是两个成员?
  • 他们代表 2 个成员
  • V 是会员吗? V004_2 的作用是什么?目前还不清楚。你如何解释第二个例子?
  • 不,它不是会员,你可以删除这部分它可以像这样开始 aB181500181559aB182000191659

标签: python arrays regex


【解决方案1】:

根据您的输入,看看以下是否有效。

我假设字段是静态的,我们可以去掉下划线和第一次出现的字母数字字符之前的任何内容。以及一个字符串包含一个用户的数据。

演示代码[更新]

import re

def mySplit(s):
    #Filter first part
    thisStr = s.rsplit('_2', 1)[1]

    #To split the string at digits you can use re.split with the regular expression \d+:
    return filter(None, re.split(r'(\d+)', thisStr))


def prepMemberData(aList):
    memData = []
    keys = []
    values = []

    for item in aList:
        #print item

        if item.isalpha():
            keys += item

        if item.isdigit():
            hr1,mi1,se1,hr2,mi2,se2 = re.findall(r'.{1,2}',item,re.DOTALL)
            values.append(hr1 + "h" + mi1 + "m" + se1 + "s" + "," + hr2 + "h" + mi2 + "m" + se2 + "s")

    temp = []
    if len(keys) != len(values):
        for i in values:
            temp += i , i
            values = temp

    myLst = [(x ,y) for x, y in zip(keys, values)] #Merge key and value lists

    for i in myLst:        
        #Remove ' () [] 
        newi = re.sub(r'[\'|(|)|[|\]]',r'',str(i))
        memData.append(newi)

    return memData


#Process first String
myStr = "V004_2aB181500181559aB182000191659"
myLst1= mySplit(myStr)
print prepMemberData(myLst1)

#Process second String
myStr2 = "V001_2a194300194359a203100203159"
myLst2= mySplit(myStr2)
print prepMemberData(myLst2)

输出[更新]

    Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
['a, 18h15m00s,18h15m59s', 'B, 18h15m00s,18h15m59s', 'a, 18h20m00s,19h16m59s', 'B, 18h20m00s,19h16m59s']
['a, 19h43m00s,19h43m59s', 'a, 20h31m00s,20h31m59s']
>>> 

【讨论】:

  • 感谢您的帮助
  • 如果答案满足您的要求,请接受答案,这样它就不会显示为未回答,这也会关闭 Q/A 循环。
  • 这不是我所需要的,我宁愿这样:mem1Data = ['a', '18h15m00s', '18h15m59s', 'B','18h15m00s', '18h15m59s','a ','18h20m00s', '19h16m59s','B','18h20m00s', '19h16m59s'] 一样也拆信
  • 好吧,我想我之前没有读到 aB 是两个成员的 cmets。无论如何,我更新了代码(见上面的更新)并试图匹配输出(见上面的更新)接近你需要的。如果可行,请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
相关资源
最近更新 更多