早教吧 育儿知识 作业答案 考试题库 百科 知识分享

求高手帮忙写一个参考文献的正则表达式,格斯如下作者,作者,作者.文章标题.杂志名称.2009;11(4):102-107.作者.文章标题.杂志名称.2009;11(4):24-28.(标点均为英文标点,作者为一个或多个,年不超过

题目详情
求高手帮忙写一个参考文献的正则表达式,格斯如下
作者,作者,作者.文章标题.杂志名称.2009;11(4):102-107.
作者.文章标题.杂志名称.2009;11(4):24-28.
(标点均为英文标点,作者为一个或多个,年不超过四位,括号里的数字不超过两位)
▼优质解答
答案和解析
#!python2.7
# encoding:utf-8
import re
# 正则表达式定义
patt = re.compile(r'''
P.)\.
P.)\.
P.)\.
P\d{4});
P\d+)
\((?P\d{1,2})\):
P\d+-\d+)\.
''',re.X|re.I|re.U)
# 待解析的数据
content = '''
作者,作者,作者.文章标题.杂志名称.2009;11(4):102-107.
作者.文章标题.杂志名称.2009;11(4):24-28.
'''
def parserline(ln):
''' 解析一行数据 '''
m = patt.match(ln)
if m:
m = m.groupdict()
m['authors'] = m['authors'].split(',')
return m
def showdict(d):
''' 将字典数据作为字符串返回,以便打印 '''
return '\n'.join([
'%10s:%s'%(k,v if not isinstance(v,(list,))
else ('[%s]'%','.join(v))
)
for k,v in d.items()])
for ln in content.splitlines():
m = parserline(ln)
if m:
print showdict(m)
print '----'
执行结果如下
>pythonw -u "baidu.py"
title:文章标题
year:2009
period:4
month:11
magazine:杂志名称
authors:[作者,作者,作者]
pages:102-107
----
title:文章标题
year:2009
period:4
month:11
magazine:杂志名称
authors:[作者]
pages:24-28
----
>Exit code:0 Time:0.503