<p>首先需要从字符串中提取日期部分。由于日期包含0填充数字(例如<code>01</code>而不是<code>1</code>),因此它始终是16位数字。要处理第一个数字的未知长度,您可以使用类似<code>^\d{1,2}__([\d\-\s]{16})</code>的正则表达式模式,它匹配一个1位或2位数字,然后是两个下划线,然后是一个16个字符的日期,在捕获组1中捕获日期,或者您可以执行以下操作:</p>
<pre><code>i = line.index('_') + 2
print(line[i:i+16])
</code></pre>
<p>无论哪种方式,现在都有了时间字符串,例如<code>01-11-2020 12-15</code>。现在,您可以使用<code>strptime</code>函数解析它以获得<code>datetime</code>对象。(有关如何构造适当的格式字符串,请参见<a href="https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior" rel="nofollow noreferrer">https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior</a>。)</p>
<pre><code>import datetime
format = '%d-%m-%Y %H-%M'
print(datetime.datetime.strptime('01-11-2020 12-15', format))
</code></pre>
<p><code>datetime</code>对象是可以比较的,因此使用这些对象作为键对列表进行排序将实现您想要的功能,即使用<code>sorted(list1, key=...)</code></p>
<p>以下是完整的代码:</p>
<pre><code>import re
import datetime
extract_time_pattern = re.compile(r'^\d{1,2}__([\d\-\s]{16})')
def extract_datetime(line:str):
# i = line.index('_') + 2
# time_string = line[i:i+16]
time_string = extract_time_pattern.match(line).group(1)
format = '%d-%m-%Y %H-%M'
return datetime.datetime.strptime(time_string, format)
list1 = ['3__01-11-2020 12-15 asiudhais', '12__04-11-2020 01-10 dgsisdwrais', '3__01-09-1990 02-34 dfsdweis']
print(sorted(list1, key=extract_datetime))
</code></pre>