我想拆分可能具有多个定界符的查询字符串。

我的弦是 book_id=123&start_date>=2023-09-12&end_date<=2023-09-14&status!=return

我们有6个定界符,=, !=, >, <, >=, <=

如果在字符串中找到上述定界符中的任何一个,我想拆分字符串。

首先,我使用'&'分开字符串,然后尝试,

re.findall('[^=!=><>=<=\s]+|[=!=><>=<=]', 'sample!=2023-09-01') 我明白了,['sample', '!', '=', '2023-09-01']

re.findall('[^=!=><>=<=\s]+|[=!=><>=<=]', 'sample=2023-09-01') ['sample', '=', '2023-09-01']

响应不平衡。

我想要key, delim, val = ['sample', '!=', '2023-09-01']

代替 ['sample', '!', '=', '2023-09-01']

我以前的正则表达式是,re.split('[=|!=|>|<|>=|<=]', param)也给了我同样的结果。

我提到:正则划分由多个定界线分开

分析解答

如果密钥值对用&符号分开,我建议先用该符号将字符串分配,然后使用re.split(!?=|[><]=?)模式使用(!?=|[><]=?)模式,该模式与您列出的所有六个操作员匹配并捕获到第1组:

[re.split(r'(!?=|[><]=?)', x) for x in text.split('&')]

请参阅正则demo。请注意,re.split保留所有捕获的子字符串。模式细节:

  • !?=-可选的!,然后是=
  • |-或
  • [><]=? -<><=>=

另请参见Pythondemo

import re
text = "book_id=123&start_date>=2023-09-12&end_date<=2023-09-14&status!=return"
print( [re.split(r'(!?=|[><]=?)', x) for x in  text.split('&')] )

输出:

[['book_id', '=', '123'], ['start_date', '>=', '2023-09-12'], ['end_date', '<=', '2023-09-14'], ['status', '!=', 'return']]