<p>我认为这应该起作用:</p>
<pre class="lang-py prettyprint-override"><code>import re
input_list = ['FBXASC048009Car', 'FBXASC053002Toy', 'FBXASC050004Human']
pattern = re.compile('FBXASC(\d{3,3})')
def decode(match):
return chr(int(match.group(1)))
result = [re.sub(pattern, decode, item) for item in input_list]
print(result)
</code></pre>
<p>现在,应该有一些解释:</p>
<p>1-对象<code>pattern</code>是一个<a href="https://docs.python.org/3/howto/regex.html" rel="nofollow noreferrer">regular expression</a>,它将匹配以“FBXASC”开头并以3位数字(0-9)结尾的字符串的任何部分。(<code>\d</code>表示数字,{3,3}表示它应该至少出现3次,最多出现3次,即正好出现3次)。此外,围绕\d{3,3}的括号表示匹配的三位数字将被存储以供以后使用(在下一部分中解释)</p>
<p>2.<code>decode</code>函数接收一个<a href="https://docs.python.org/3/library/re.html#match-objects" rel="nofollow noreferrer">match object</a>,使用<code>.group(1)</code>提取第一个匹配的组(在我们的例子中是由\d{3,3}匹配的三位数字),然后使用<code>int</code>函数将字符串解析为整数(例如,将'048'转换为48),最后使用<code>chr</code>函数查找哪个字符具有该ASCII代码。(例如,chr(48)将返回“0”,chr(65)将返回“A”)</p>
<p>3-最后一部分将<code>re.sub</code>函数应用于列表的所有元素,这些元素将用相应的ASCII字符替换您描述的模式(FBXASC048[3位])的每次出现</p>
<p>您可以看到,此解决方案不仅限于您的特定示例。任何数字都可以使用,只要它具有由<code>chr</code>函数识别的相应ASCII字符</p>
<p>但是,如果您确实想将其限制在48-57范围内,只需修改<code>decode</code>函数即可:</p>
<pre class="lang-py prettyprint-override"><code>def decode(match):
ascii_code = int(match.group(1))
if ascii_code >= 48 and ascii_code <= 57:
return chr(ascii_code)
else:
return match.group(0) # returns the entire string - no modification
</code></pre>