我有一个格式为
的文本文件3rd Year:
MECN3010 PREREQ MECN2011 COREQ TIMES1 TIMES2 MO3, MO4, FR5, TH1, TH2
MECN3012 PREREQ MECN2012 COREQ TIMES1 TUA, WE3, TH1, TH2 TIMES2
我如何只提取一行的特定部分?
例如假设我只想提取
PREREQ MECN 2011
部分来自第二行。
我能够阅读我想要的特定行,但我不知道如何split
/ strip
只需要我需要的信息。
答案 0 :(得分:0)
如果您感兴趣的所有行都包含PREREQ MECNYYYY
,其中YYYY
是年份编号,则可以使用如下所示的正则表达式:
编辑:更正了代码
import re
# assume that line holds your text line
regex = ur'PREREQ MECN\d{4}'
matcher = re.search(re.compile(regex), line)
if (matcher):
match = matcher.group() #gives the actual match
答案 1 :(得分:0)
lines = '''3rd Year:
MECN3010 PREREQ MECN2011 COREQ TIMES1 TIMES2 MO3, MO4, FR5, TH1, TH2
MECN3012 PREREQ MECN2012 COREQ TIMES1 TUA, WE3, TH1, TH2 TIMES2'''
for line in lines.splitlines()[1:]:
print " ".join(line.split()[1:3])
答案 2 :(得分:0)
让我们说你找到了你感兴趣的专栏:
line = "MECN3010 PREREQ MECN2011 COREQ TIMES1 TIMES2 MO3, MO4, FR5, TH1, TH2"
您有几种方法可以提取给定字段:
1)基于令牌的
>>> tokens = line.split()
>>> tokens
['MECN3010', 'PREREQ', 'MECN2011', 'COREQ', 'TIMES1', 'TIMES2', 'MO3,', 'MO4,', 'FR5,', 'TH1,', 'TH2']
>>> tokens[2]
'MECN2011'
>>> tokens[5]
'TIMES2'
基本上,您首先将该行拆分为一个令牌列表(此处使用split()
完成),然后使用基本列表索引选择您感兴趣的那个。
如果您对多个令牌感兴趣,可以将它们切片并重新加入:
>>> ' '.join(tokens[1:3])
'PREREQ MECN2011'
2)基于排名
>>> line[16:24]
'MECN2011'
>>> line[38:44]
'TIMES2'
如果您要查找的行的部分位于行开头的已知偏移处,则可以使用可迭代切片语法。
3)正则表达式
>>> re.search(r'(TIMES\d)', line).groups()
('TIMES1',)
>>> re.findall(r'TIMES\d', line)
['TIMES1', 'TIMES2']
这是更高级的,全面覆盖范围,但here's the documentation。