Suppose I have a string like this:
exp = 'CASE WHEN "Expressions"."PRODUCT_CATEGORIES"."CATEGORY_NAME"=\'CPU\' THEN \'YES\' WHEN "Expressions"."PRODUCT_CATEGORIES"."CATEGORY_NAME"=\'RAM\' THEN \'YES\' ELSE \'NO\' END'
I want to return the text between WHEN and THEN in all occurrences.
This is the expected output
['"Expressions"."PRODUCT_CATEGORIES"."CATEGORY_NAME"=\'CPU\'',
'"Expressions"."PRODUCT_CATEGORIES"."CATEGORY_NAME"=\'RAM\'']
What I have tried is this:
res = re.findall(r'\s*(WHEN|When|when)+\s*(.*)\s*(THEN|Then|then)+\s*')
But the resulting list shows this output in my case
['(WHEN "Expressions"."PRODUCT_CATEGORIES"."CATEGORY_NAME"=\'CPU\' THEN \'YES\' WHEN "Expressions"."PRODUCT_CATEGORIES"."CATEGORY_NAME"=\'RAM\' THEN)']
Make it non-greedy with ?
:
re.findall("when *(.+?) *then", exp, re.I)
Output:
['"Expressions"."PRODUCT_CATEGORIES"."CATEGORY_NAME"=\'CPU\'',
'"Expressions"."PRODUCT_CATEGORIES"."CATEGORY_NAME"=\'RAM\'']