根据正则表达式匹配对字符串列表排序

5 投票
4 回答
11776 浏览
提问于 2025-04-15 12:41

我有一个文本文件,内容大概是这样的:

random text random text, can be anything blabla %A blabla
random text random text, can be anything blabla %D blabla
random text random text, can be anything blabla blabla %F
random text random text, can be anything blabla blabla
random text random text, %C can be anything blabla blabla

当我用 readlines() 读取这个文件时,它变成了一串句子的列表。现在我想按照每个句子中 % 后面的字母来对这个列表进行排序。也就是说,排序后应该是这样的:

random text random text, can be anything blabla %A blabla
random text random text, %C can be anything blabla blabla
random text random text, can be anything blabla %D blabla
random text random text, can be anything blabla blabla %F
random text random text, can be anything blabla blabla

有没有什么好的方法可以做到这一点,还是说我必须把每个字符串拆分成元组,然后把字母移动到特定的列,再用 key=operator.itemgetter(col) 来排序呢?

谢谢

4 个回答

1

这里有一个简单粗暴的方法。不过因为我不知道你具体的排序需求,所以不能确定这个方法是否适合你。

假设你的列表保存在 'listoflines' 里:

listoflines.sort( key=lambda x: x[x.find('%'):] )

请注意,这个方法会把所有没有 '%' 字符的行按照它们最后一个字符进行排序。

4

这个怎么样?希望这能帮到你。

def k(line):
    v = line.partition("%")[2]
    v = v[0] if v else 'z' # here z stands for the max value
    return v
print ''.join(sorted(open('data.txt', 'rb'), key = k))
9

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,尤其是当我们不太了解这些工具的工作原理时。

比如说,有人可能在使用一个特定的库时,发现它的某个功能没有按照预期工作。这时候,了解这个库的基本用法和常见问题就显得特别重要。通常,开发者会在网上寻找解决方案,比如在StackOverflow这样的论坛上提问或查找答案。

在这些讨论中,其他开发者会分享他们的经验和解决方案,帮助提问者找到问题的根源。通过这些交流,我们可以学到很多实用的知识,避免在将来遇到同样的问题。

总之,遇到问题时,不要害怕去寻求帮助,社区里有很多人愿意分享他们的经验和解决办法。

In [1]: def grp(pat, txt): 
   ...:     r = re.search(pat, txt)
   ...:     return r.group(0) if r else '&'

In [2]: y
Out[2]: 
['random text random text, can be anything blabla %A blabla',
 'random text random text, can be anything blabla %D blabla',
 'random text random text, can be anything blabla blabla %F',
 'random text random text, can be anything blabla blabla',
 'random text random text, %C can be anything blabla blabla']

In [3]: y.sort(key=lambda l: grp("%\w", l))

In [4]: y
Out[4]: 
['random text random text, can be anything blabla %A blabla',
 'random text random text, %C can be anything blabla blabla',
 'random text random text, can be anything blabla %D blabla',
 'random text random text, can be anything blabla blabla %F',
 'random text random text, can be anything blabla blabla']

撰写回答