带有OR |模式顺序的正则表达式Python
如何从正则表达式返回有序列表?还是在学习正则表达式 例如,假设我有list=[a,b,c,c,b,a,g],我想先有所有的b,然后是a,最后是列表中的a。我怎样才能注册呢 我在想: 模式=重新编译('b | c | a') [如果模式匹配(字母),则列表中的字母对应] 但是这个刚出来,['a','b','c','c','b','a'] 我想要的是['b','b','c','c','a','a']带有OR |模式顺序的正则表达式Python,python,regex,Python,Regex,如何从正则表达式返回有序列表?还是在学习正则表达式 例如,假设我有list=[a,b,c,c,b,a,g],我想先有所有的b,然后是a,最后是列表中的a。我怎样才能注册呢 我在想: 模式=重新编译('b | c | a') [如果模式匹配(字母),则列表中的字母对应] 但是这个刚出来,['a','b','c','c','b','a'] 我想要的是['b','b','c','c','a','a'] 那怎么可能呢?谢谢 而不是regex实现这一点的方法是使用sorted并编写自己的函数。示例- &g
那怎么可能呢?谢谢 而不是
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\u compare
函数以进行有序排序。我不打算为您编写该函数,但这样做可以解决您的问题。正则表达式用于处理文本中的模式,它们真正做的只是从字符串中搜索和提取子字符串。你想做的是真正的智能处理。这远远超出了正则表达式的范围,在python中非常简单:)
你让它听起来像你的列表中应该只有“a”、“b”或“c”,这样你就可以编写一个简单的比较函数了
def cmp(c):
return {'a' : 1, 'b' : 0, 'c' : 2}[c]
然后将其交给排序后的
sorted(your_list, key=cmp)
就这么简单。排序并不是正则表达式所关注的,为什么不直接用python对结果进行排序呢?在有人总是想出一种使用正则表达式进行排序的深奥方法之前,您应该首先询问正则表达式是否是您希望用于此项工作的工具。(提示:否)我认为您应该使用排序算法,而不是正则表达式:请查看此函数的cmp参数