简体   繁体   中英

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

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\'']

Try this:

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("!!!")

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM