我想拆分可能具有多个定界符的查询字符串。
我的弦是
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']]