在python中使用正则表达式拆分包含多个单词的字符串

2024-09-27 19:21:17 发布

您现在位置: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)

但是它会被每个字符分割我们怎么能让它被单词分割呢


Tags: orandnameimportre表达式orderitems
3条回答
import itertools
exp=itertools.chain(*[y.split('or') for y in exp.split('and')])
exp=[x.strip() for x in list(exp)]

说明:第一次拆分为“和”。现在尝试吐出在“或”上获得的每个元素。这将创建列表列表。使用itertools创建一个平面列表&;从平面列表中的每个新元素中删除额外的空格

您可以分两步完成:[ss for s in exp.split(" and ") for ss in s.split(' or ')]

您的正则表达式有三种选择:“and”、“or”或空字符串:and|or|

省略后面的|以仅由这两个单词分割

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

请注意,这将无法可靠地工作;它将在“and”的任何实例上拆分,即使是在引号或单词的一部分中。您可以使用\b使其仅在完整单词上拆分,但仍将在产品名称上拆分,如'Black and Decker'。如果您需要它的可靠性和通用性,那么必须使用完整的语法解析字符串(如果是标准SQL或类似的语法,则可能使用现成的解析器)

相关问题 更多 >

    热门问题