-1

如何从正则表达式返回有序列表?仍然是一种学习正则表达式。

例如,假设我有 list = [a,b,c,c,b,a,g] 并且我希望首先拥有所有 b,然后是 a,最后是列表中的 a。我该如何对其进行正则表达式?

我在想:pattern = re.compile('b|c|a') [letter for letter in list if pattern.match(letter)]

但这只是出来 ['a','b','c','c','b','a']

我想要的是 ['b','b','c','c','a','a']

这怎么可能?谢谢!

4

2 回答 2

1

正则表达式用于处理文本中的模式,它们真正做的只是从字符串中搜索和提取子字符串。您想要的是实际进行智能处理。这远远超出了在 python 中非常容易放置的正则表达式的范围:)

您听起来好像列表中应该只有“a”、“b”或“c”,这样您就可以编写一个简单的比较函数

def cmp(c):
    return {'a' : 1, 'b' : 0, 'c' : 2}[c]

然后给sorted

sorted(your_list, key=cmp)

就那么简单。

于 2013-07-31T06:30:43.750 回答
0

而不是regex解决这个问题的方法是使用sorted和编写您自己的自定义比较器函数。例子 -

>>> def my_compare(x, y):
        return x - y
>>> sorted([5, 2, 4, 1, 3], cmp=my_compare)
[1, 2, 3, 4, 5]

因此,在您的情况下,您需要更改my_compare函数以进行有序排序。我不会为您编写该函数,但这样做可以解决您的问题。

于 2013-07-31T06:30:27.833 回答