1

2つの異なる正規表現が必要です。1つ目は、年の下2桁に一致するものです。たとえば、「2010」がある場合は、「10」を取得したいと思います。私は次のようなことをしてみました

\d{2}\Z

しかし、それは機能しませんでした。2つ目は、「and」で区切られたさまざまな名前と名前の最初の3文字を取得する2つです。例えば私は持っています

John Smith and Paul Anthony Doe

「SmiDoe」を返す正規表現が欲しいのですが、Doeが存在しない場合は「Smi」のみを返します。2つ以上の名前と名前でも機能するのは素晴らしいことです。

編集:提供されたソリューションは完全に機能し、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」が取得されることです。

4

2 に答える 2

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'
于 2013-03-19T20:29:52.260 に答える
1

最後の2桁を取得する方法は次のとおりです。

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

http://rubular.com/r/IgVeKXucJ0

そして、あなたが持っている文字列から名前の最初の3文字を取得するには:

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

http://rubular.com/r/f8OXDB9pDq、明らかに試合の最初のアイテムが欲しい

于 2013-03-19T19:55:06.503 に答える