【问题标题】:split string based on regular expression value in python根据python中的正则表达式值拆分字符串
【发布时间】:2021-03-14 09:58:57
【问题描述】:

假设我有一个字符串

exp = '"security_datafilter"."PRODUCT_CATEGORIES"."CATEGORY_NAME" IN ("CPU","Storage")' 

我想根据单词 IN 拆分字符串 所以我的预期结果是

['"security_datafilter"."PRODUCT_CATEGORIES"."CATEGORY_NAME"','IN','("CPU","Storage")']

但在我的情况下它不起作用 这是我尝试过的

import re
exp_split = re.split(r'( in )',exp,re.I) 

【问题讨论】:

    标签: python regex python-re


    【解决方案1】:

    re documentation: re.split(pattern, string, maxsplit=0, flags=0)

    split() 函数期望第三个位置参数是 maxsplit 参数。您的代码将re.I 提供给maxsplit 而没有flags。您应该将flags 作为关键字参数,如下所示:

    exp_split = re.split(r'( in )',exp, flags=re.I)
    

    【讨论】:

    • 所以你在这里复制粘贴的 OP 的尝试。你有没有试过,如果它有效?
    • @GrzegorzSkibinski 是的,我在我的 py shell 上试​​过了。 Shree 是在正确的道路上,只是错过了关键字参数。
    • 嗯,我明白了 - 只是一个注释 - 如果 OP 想要按IN 不区分大小写,更合适的是exp_split = re.split(r'(\bin\b)',exp,flags=re.I) - 所以你可以满足in 在最后行,或者像in(...)这样的语法假设空格作为in的分隔符有点投机取巧。
    • @GrzegorzSkibinski 确实!谢谢你的信息:)
    【解决方案2】:

    只需将分隔符大写,如果您不希望结果中的空格将它们保留在捕获组之外:

    exp_split = re.split(r'\s(IN)\s', exp, re.I) 
    exp_split
    

    输出

    ['"security_datafilter"."PRODUCT_CATEGORIES"."CATEGORY_NAME"', 'IN', '("CPU","Storage")']
    

    【讨论】:

      猜你喜欢
      • 2012-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多