正则表达式获取年份的姓氏和前三个姓氏的姓氏

时间:2013-03-19 19:53:55

标签: python regex

我需要两种不同的正则表达式。第一个是匹配一年的最后两位数,例如,如果我有“2010”,我想获得“10”。我尝试过像

这样的事情
\d{2}\Z

但它不起作用。 第二个是两个获得由“和”分隔的各种姓名和姓氏的前三个字母。 比如我有

John Smith and Paul Anthony Doe

我想要一个正则表达式返回“SmiDoe”但只有“Smi”如果Doe不存在。如果只有两个名字和姓氏,那就更好了。

编辑:提供的解决方案完美无缺,现在我正在尝试使用它们为Vim使用Ultisnips插件构建bibtex(.bib扩展名)代码段。我试过的片段是

snippet ta "Test" b
@Article{${1/\s(\w{,3})\w*($|\sand)/$1/g}${2/\d{2}$/$0/g},
 author={${1:John Smith and Paul Anthony Samuelson}}
 year={${2:2010}}}
endsnippet

问题在于,当片段扩展时,我得到“JohnSmi Paul AnthonySam2010”,我想获得“SmiSam10”。

2 个答案:

答案 0 :(得分:2)

你真的需要一个正则表达式,还是会这样做?

>>> def AbbreviateAuthors(names):
...     return ''.join(i.split()[-1][:3] for i in names.split(' and '))
>>> AbbreviateAuthors('John Smith and Paul Anthony Doe and Chris Burns')
34: 'SmiDoeBur'
>>> AbbreviateAuthors('John Smith and Paul Anthony Doe')
35: 'SmiDoe'
>>> AbbreviateAuthors('John Smith')
36: 'Smi'
>>> AbbreviateAuthors('Smith')
37: 'Smi'
>>> AbbreviateAuthors('Sm')
38: 'Sm'

答案 1 :(得分:1)

这是获取最后两位数字的方法:

"/\d{2}$/" -> "2010" -> 10

http://rubular.com/r/IgVeKXucJ0

从你所拥有的字符串中获取姓氏的前三个字母:

"/\s(\w{,3})\w*($|\sand)/" -> "John Smith and Paul Anthony Doe" -> 1. Smi 2. Doe

http://rubular.com/r/f8OXDB9pDq,显然想要比赛的第一项