即时阅读文件,文件中的这一行给我带来了麻烦。它是
CSE 3380,professional,CSE 2315,note: MATH 3330 can be taken instead
我写的用于拆分的代码是使用re.split模块来遵循这些类型的文件将遵循的模式
class(comma) catagory(comma) prereq class(comma) note(semicolon)
theres多条线都以相同的方式构建,但有些线条有破折号和其他字符,所以基于非字母字符分割的方法不会有帮助。我想分成逗号,逗号,逗号,分号的东西
course, catagory, pre, note = re.split(', |, |, |: ', line)
我收到错误消息“ValueError:需要超过1个值才能解压缩”。我不知道为什么。我在其他不同的图案线条中使用了这种方法,但对于这种特殊的图案,我遇到了麻烦。
答案 0 :(得分:2)
首先用分号拆分,然后用逗号分割第一部分:
>>> var = 'CSE 3380,professional,CSE 2315,note: MATH 3330 can be taken instead'
>>> var = var.split(':')
>>> var
['CSE 3380,professional,CSE 2315,note', ' MATH 3330 can be taken instead']
>>> var[0] = var[0].split(',')
>>> var
[['CSE 3380', 'professional', 'CSE 2315', 'note'], ' MATH 3330 can be taken instead']
答案 1 :(得分:2)
line = "CSE 3380,professional,CSE 2315,note: MATH 3330 can be taken instead"
parts = re.match('^(.*?), ?(.*?), ?(.*?)(?:, ?note: ?(.*))$', line).groups()
然后parts
是元组:
('CSE 3380', 'professional', 'CSE 2315', 'MATH 3330 can be taken instead')
或者将它作为一个更容易使用的词典:
line = "CSE 3380,professional,CSE 2315,note: MATH 3330 can be taken instead"
parts = re.match('^(?P<class>.*?), ?(?P<catagory>.*?), ?(?P<prereq>.*?)(?:, ?note: ?(?P<note>.*))$', line).groupdict()
将parts
设置为:
{'note': 'MATH 3330 can be taken instead', 'prereq': 'CSE 2315', 'catagory': 'professional', 'class': 'CSE 3380'}