在python中使用正则表达式对字符串列表进行排序实际上并没有排序



所以我有一个字符串列表,我排序它:

list = [' R1O-GN | ile: 13 |', ' LXQ2-T | ile: 6 |', ' LXQ2-T | ile: 11 |', ' LXQ2-T | ile: 9 |', ' 4-HWWF | ile: 11 |', ' 4-HWWF | ile: 9 |', ' J-ZYSZ | ile: 12 |', ' UGR-J2 | ile: 8 |']
def ile_sort(elem):
    return re.findall(r'ile: (d+)',elem)
list = sorted(list, key=ile_sort)

带6的字符串应该在前面,带13的字符串应该在后面,但实际结果是:

[' LXQ2-T | ile: 11 |', ' 4-HWWF | ile: 11 |', ' J-ZYSZ | ile: 12 |', ' R1O-GN | ile: 13 |', ' LXQ2-T | ile: 6 |', ' UGR-J2 | ile: 8 |', ' LXQ2-T | ile: 9 |', ' 4-HWWF | ile: 9 |']

问题是在这些列表项上使用re.findall()返回列表内的字符串,例如:["13"]

要解决这个问题,将ile_sort()方法替换为:

def ile_sort(elem):
    return int(re.findall('ile: (d+)', elem)[0])

正如其他人已经提到的,您需要从传递给key参数的函数中返回单个元素。(不是从findall返回的列表)。该元素将用于排序。

您可以从findall中获得第一项,或将findall更改为search并获取第一个。不要忘记将最终结果转换为整数。

import re
lst = [' R1O-GN | ile: 13 |', ' LXQ2-T | ile: 6 |', ' LXQ2-T | ile: 11 |',
       ' LXQ2-T | ile: 9 |', ' 4-HWWF | ile: 11 |', ' 4-HWWF | ile: 9 |',
       ' J-ZYSZ | ile: 12 |', ' UGR-J2 | ile: 8 |']
def ile_sort(elem):
    return int(re.search(r'ile: (d+)', elem).group(1))
lst = sorted(lst, key=ile_sort)
print(lst)

输出:

[' LXQ2-T | ile: 6 |', ' UGR-J2 | ile: 8 |', ' LXQ2-T | ile: 9 |', ' 4-HWWF | ile: 9 |', ' LXQ2-T | ile: 11 |', ' 4-HWWF | ile: 11 |', ' J-ZYSZ | ile: 12 |', ' R1O-GN | ile: 13 |']

最新更新