Ilj*_*iko -2 python string time split
我想知道是否有人可以帮助提出一个优雅的解决方案,如何将从路由器的格式API收到的时间字符串拆分"4d12h33m59s"成碎片.
问题是字符串可能是动态大小.例如,它可以是"4d12h33m59s"或"12h33m59s"或"12y14w4d12h33m59s"或"12m23s","33s".
是否有任何优雅的方法来分割字符串并得到如下列表:
received_string = "12y14w4d12h33m59s"
time_list = convert_string(received_string)
print(time_list)
["12y","14w","4d","12h","33m","59s"]
Run Code Online (Sandbox Code Playgroud)
您可以使用正则表达式:
import re
time_list = re.findall('\d+[a-z]', received_string)
Run Code Online (Sandbox Code Playgroud)
该re.findall()函数生成输入字符串中给定模式的所有匹配项的列表.此处模式查找1个或更多数字,后跟一个小写ASCII字母.
你可以通过使用允许使用的字母更加挑剔[ywdhms],但如果你的输入结构合理,我就不用担心了.
演示:
>>> import re
>>> received_string = "12y14w4d12h33m59s"
>>> re.findall('\d+[a-z]', received_string)
['12y', '14w', '4d', '12h', '33m', '59s']
Run Code Online (Sandbox Code Playgroud)
但是,您可能希望进一步拆分数字和字母,以便更容易将信息转换为更容易使用格式(如datetime.timedelta()对象),也可能转换为字典:
{type_: int(count) for count, type_ in re.findall('(\d+)([a-z])', received_string)}
Run Code Online (Sandbox Code Playgroud)
所添加的(..)分组改变re.findall()输出,以产生元组的每个匹配,含有单独的组的值(因此('12', 'y'),('14', 'w')等).
这产生了
{'y': 12, 'w': 14, 'd': 4, 'h': 12, 'm': 33, 's': 59}
Run Code Online (Sandbox Code Playgroud)
供您参考.
| 归档时间: |
|
| 查看次数: |
51 次 |
| 最近记录: |