Разделить строку на несколько слов, используя регулярное выражение в python

#python

#python

Вопрос:

Предположим, у меня есть выражение

 exp=""OLS"."ORDER_ITEMS"."QUANTITY"  <50 and  "OLS"."PRODUCTS"."PRODUCT_NAME"  = 'Kingston' or "OLS"."ORDER_ITEMS"."QUANTITY"  <20"
 

Я хочу разделить выражение на и , или так, чтобы мой результат был

 exp=['"OLS"."ORDER_ITEMS"."QUANTITY"  <50','"OLS"."PRODUCTS"."PRODUCT_NAME"  = 'Kingston'','"OLS"."ORDER_ITEMS"."QUANTITY"  <20']
 

Это то, что я пробовал:

 import re
res=re.split('and|or|',exp)
 

но он будет разделен на каждый символ, как мы можем разделить его по слову?

Комментарии:

1. Да, и в чем именно ваша проблема? Вы гуглили «разделенную строку python»?

2. да, показано, что я пробовал

3. @Julien с разделенной строкой мы не можем передать несколько разделителей, верно?

Ответ №1:

 import itertools
exp=itertools.chain(*[y.split('or') for y in exp.split('and')])
exp=[x.strip() for x in list(exp)]
 

Объяснение: 1-е разделение на ‘и’. Теперь попробуйте вставить каждый полученный элемент в ‘или’. Это создаст список списков. Используя itertools, создайте плоский список и удалите дополнительные пробелы из каждого нового элемента в плоском списке

Ответ №2:

Вы можете сделать это в 2 шага: [ss for s in exp.split(" and ") for ss in s.split(' or ')]

Комментарии:

1.но, я думаю, это не будет динамическим, если у меня есть выражение только с и exp=""OLS"."ORDER_ITEMS"."QUANTITY" <50 and "OLS"."PRODUCTS"."PRODUCT_NAME" = 'Kingston' ?

Ответ №3:

У вашего регулярного выражения есть три альтернативы: «и», «или» или пустая строка: and|or|

Опустите | конец, чтобы разделить только на эти два слова.

 import re
res=re.split('and|or', exp)
 

Обратите внимание, что это не будет работать надежно; он будет разделен на любой экземпляр «и», даже если он в кавычках или является частью слова. Вы могли бы разделить ее только на полные слова, используя b , но это все равно будет разделено на название продукта, например 'Black and Decker' . Если вам нужно, чтобы она была надежной и общей, вам придется проанализировать строку, используя полный синтаксис (возможно, используя готовый синтаксический анализатор, если это стандартный SQL или аналогичный).