如何拆分字符串并选择特定字段

时间:2018-05-27 18:53:14

标签: python regex split

我有一个字符串,我需要拆分/切片并设置为不同的变量。这是一个示例字符串:

Uploaded 09-09 2015, Size 2.05 GiB, ULed by USERX

我需要最终输出类似于:

date = '09-09 2015' ; size = '2.05' ; user = 'USERX'

这是我目前使用的代码,变量'string'代表原始字符串:

date, size, user = string.split(',')
date = date.split()[1], date.split()[2]
size = size.split()[1]
user = user.split()[2]

这样可行,但我不禁觉得代码很痛苦。有一个更好的方法吗?非常感谢,您的代码可以优雅且无错误。

3 个答案:

答案 0 :(得分:2)

您可以使用re.findall

import re
s = 'Uploaded 09-09 2015, Size 2.05 GiB, ULed by USERX'
results = re.findall('(?<=Uploaded\s)[\d\-\s]+|(?<=Size\s)[\d\.]+|(?<=ULed by\s)\w+$', s)
d = dict(zip(['date', 'size', 'user'], results))

输出:

{'date': '09-09 2015', 'size': '2.05', 'user': 'USERX'}

答案 1 :(得分:1)

另一个使用mapping词典:

import re

string = "Uploaded 09-09 2015, Size 2.05 GiB, ULed by USERX"
mappings = {'Uploaded': 'date', 'Size': 'size', 'by': 'user'}
rx = re.compile(r'(\w+)\s*\b([-. A-Z0-9]{2,})\b')

result = {mappings[m.group(1)]: m.group(2).strip() 
          for m in rx.finditer(string)}
print(result)

这会产生

{'date': '09-09 2015', 'size': '2.05', 'user': 'USERX'}

请参阅a demo on regex101.com

答案 2 :(得分:1)

你可能想尝试python的命名组捕获:

system(1, @args)