Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何拆分字符串并选择特定字段_Python_Regex_Split - Fatal编程技术网

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

Python 如何拆分字符串并选择特定字段,python,regex,split,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], dat

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

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]
这是可行的,但我还是忍不住觉得代码太粗糙了。有更好的方法吗?非常感谢,祝您的代码优雅无误。

您可以使用re.findall:

您可以使用re.findall:

另一个使用映射字典:

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'}
请参阅。

使用映射词典的另一个:

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'}

请参阅。

您可能希望尝试python的命名组捕获:


您可能希望尝试python的命名组捕获:


你能告诉我一些你使用的正则表达式吗?你能告诉我一些你使用的正则表达式吗?Final regexp:?Final regexp:?
import re
test_string = 'Uploaded 09-09 2015, Size 2.05 GiB, ULed by USERX'
p = re.compile(r'\w+ (?P<date>\d{2}-\d{2} \d{4}), Size (?P<size>\d+(\.\d+)?) GiB, ULed by (?P<user>\w+)')
result = p.search(test_string)
result.groupdict()