Return 使用正则表达式在 python 中以列表形式出现的所有字符串

Return all the occurrences from a string as a list in python using regular expression

假设我有这样一个字符串:

exp = 'CASE WHEN  "Expressions"."PRODUCT_CATEGORIES"."CATEGORY_NAME"=\'CPU\'  THEN   \'YES\'  WHEN  "Expressions"."PRODUCT_CATEGORIES"."CATEGORY_NAME"=\'RAM\'  THEN   \'YES\' ELSE  \'NO\' END' 

我想return所有出现的时间和时间之间的文本。

这是预期的输出

['"Expressions"."PRODUCT_CATEGORIES"."CATEGORY_NAME"=\'CPU\'',
 '"Expressions"."PRODUCT_CATEGORIES"."CATEGORY_NAME"=\'RAM\'']

我试过的是这样的:

res = re.findall(r'\s*(WHEN|When|when)+\s*(.*)\s*(THEN|Then|then)+\s*')

但结果列表在我的例子中显示了这个输出

['(WHEN  "Expressions"."PRODUCT_CATEGORIES"."CATEGORY_NAME"=\'CPU\'  THEN   \'YES\'  WHEN  "Expressions"."PRODUCT_CATEGORIES"."CATEGORY_NAME"=\'RAM\'  THEN)']

使用 ? 使其成为非贪婪的:

re.findall("when *(.+?) *then", exp, re.I)

输出:

['"Expressions"."PRODUCT_CATEGORIES"."CATEGORY_NAME"=\'CPU\'',
 '"Expressions"."PRODUCT_CATEGORIES"."CATEGORY_NAME"=\'RAM\'']

试试这个:

import re
exp = """CASE WHEN  "Expressions"."PRODUCT_CATEGORIES"."CATEGORY_NAME"=\'CPU\'  THEN   \'YES\'  WHEN  "Expressions"."PRODUCT_CATEGORIES"."CATEGORY_NAME"=\'RAM\'  THEN   \'YES\' ELSE  \'NO\' END"""
x = re.findall("WHEN.*THEN", exp)

if x:
    print(x)
else:
    print("!!!")