Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有OR |模式顺序的正则表达式Python_Python_Regex - Fatal编程技术网

带有OR |模式顺序的正则表达式Python

带有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

如何从正则表达式返回有序列表?还是在学习正则表达式

例如,假设我有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
并编写自己的函数。示例-

>>> 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参数