<p>如果您将在代码中直接使用这些别名(而不仅仅是从数据结构引用),那么<code>Enum</code>是一个很好的方法:</p>
<pre><code>from enum import Enum
class Alias(Enum):
bob = 12345
jon = 23456
jack = 34567
jill = 45678
steph = 89012
</code></pre>
<p>然后使用<code>re</code>看起来像:</p>
<pre><code>line = "hey there 12345!"
line = re.sub('\d{5}', lambda v: Alias(int(v.group()).name, line)
</code></pre>
<p>您还可以使用以下方法将该行为直接添加到<code>Alias</code><code>Enum</code>:</p>
<pre><code> @classmethod
def sub(cls, line):
return re.sub('\d{5}', lambda v: cls(int(v.group())).name, line)
</code></pre>
<p>使用中:</p>
<pre><code>Alias.sub("hey there 12345!")
</code></pre>
<p>当然,<code>"bob"</code>可能应该大写,但是谁想让<code>Alias.Bob</code>布满他们的代码呢?最好将替换文本与枚举成员名称分开,使用<a href="https://pypi.python.org/pypi/aenum" rel="nofollow noreferrer">^{<cd7>}</a><sup>2</sup>更容易完成这项工作:</p>
<pre><code>from aenum import Enum
import re
class Alias(Enum):
_init_ = 'value text'
bob = 12345, 'Bob'
jon = 23456, 'Jon'
jack = 34567, 'Jack'
jill = 45678, 'Jill'
steph = 89012, 'Steph'
@classmethod
def sub(cls, line):
return re.sub('\d{5}', lambda v: cls(int(v.group())).text, line)
Alias.sub('hey there 34567!')
</code></pre>
<hr/>
<p><sup>1</sup>参见<a href="http://stackoverflow.com/a/22594360/208880">this answer</a>了解标准<code>Enum</code>用法。你知道吗</p>
<p>披露:我是<a href="https://docs.python.org/3/library/enum.html" rel="nofollow noreferrer">Python stdlib ^{<cd1>}</a>、<a href="https://pypi.python.org/pypi/enum34" rel="nofollow noreferrer">^{<cd10>} backport</a>和<a href="https://pypi.python.org/pypi/aenum" rel="nofollow noreferrer">Advanced Enumeration (^{<cd7>})</a>库的作者。你知道吗</p>