<p>最好的方法是使用regex并智能地替换数字:</p>
<pre><code>import re
examples = [
'1 Hey this is the first (1) level.\n',
'2 This is what we call a second level.\n',
'3 This is the third (3) level, deal with it.',
'56 This is the third (3) level, deal with it.'
]
class NumberReplacer(object):
def __init__(self):
self.ones = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
self.teens = ['ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen']
self.tens = ['twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety']
def convert(self, number):
if number == 0:
return 'zero'
elif number < 10:
return self.ones[number - 1]
elif number <= 19:
return self.teens[number % 10]
else:
tens = self.tens[number // 10 - 2]
ones = number % 10 - 1
if ones == -1:
return tens
else:
return ' '.join([tens, self.ones[ones]])
def __call__(self, match):
number = int(match.group(0))
return self.convert(number).title()
replacer_regex = re.compile('^\s*(\d+)')
replacer = NumberReplacer()
for example in examples:
print replacer_regex.sub(replacer, example)
</code></pre>