#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 или аналогичный).