使用正则表达式自定义排序?

时间:2018-11-07 13:08:21

标签: regex sorting google-sheets re2

我有两列,第一列是名称列表,第二列是其评级。我想使用自定义排序,为此我使用了以下内容(找到了here) :

__qualname__

哪个有效,但我的评分实际上是:

  • Great +
  • 很棒
  • 太好了
  • Good +
  • 很好
  • Good-
  • 确定+
  • ...

有什么方法可以将上述公式与正则表达式结合使用?与此类似:

def was_defined_declarative(cls):
    module_name = cls.__module__
    module = sys.modules[module_name]
    module_code = module.__loader__.get_code(module_name)
    cls_methods = set(obj for obj in cls.__dict__.values() if isinstance(obj, types.FunctionType))
    cls_meth_strings = [string for method in cls_methods for string in method.__code__.co_consts  if isinstance(string, str)] 

    for candidate_code_obj in module_code.co_consts:
        if not isinstance(candidate_code_obj, types.CodeType):
            continue
        if candidate_code_obj.co_name != cls.__name__:
            continue
        candidate_meth_strings = [string  for method_code in candidate_code_obj.co_consts if isinstance(method_code, types.CodeType) for string in method_code.co_consts if isinstance(string, str)]
        if candidate_meth_strings == cls_meth_strings:
            return True
    return False

实际上什么都没做。查看了Google表格的正则表达式公式,但在这种情况下找不到能解决问题的技巧。

干杯!

PS:一种解决方法是

=sort(A33:B50;match(B33:B50;{"Great";"Good";"OK";"Bad");true)

但是我很好奇是否有一种不太繁琐的方法

1 个答案:

答案 0 :(得分:2)

=sort(A1:B7;match(regexextract(B1:B7;"Great|Good|OK|Bad");{"Great";"Good";"OK";"Bad"};0);true)

  • 管道|用于在正则表达式中进行OR登录。
  • A1:B7B1:B7更改为您的范围。

修改

  • 要排序Good+ Good Good-,请将正则表达式更改为"Great|Good\+|Good\-|Good|OK|Bad",将数组更改为{"Great";"Good+";"Good";"Good-";"OK";"Bad"}
  

反直观:正则表达式中的顺序为Good + | Good- | Good   并放在数组{“ Great”;“ Good +”;“ Good”;“ Good-”;“ OK”;“ Bomb”}中(正则表达式中的Good已经捕获了Good实例)