从"param1=1-param2=1.e-01-param3=A"
开始,如何获取["param1=1", "param2=1.e-01", "param3=A"]
?问题是分隔符"-"可能包含在参数的值中。
弗兰克
>>> import re
>>> re.split("-", "param1=1-param2=1.e-01-param3=A")
['param1=1', 'param2=1.e', '01', 'param3=A']
>>> re.split("[^e]-[^0]", "param1=1-param2=1.e-01-param3=A")
['param1=', 'aram2=1.e-0', 'aram3=A']
>>> re.split("[?^e]-[?^0]", "param1=1-param2=1.e-01-param3=A")
['param1=1-param2=1.', '1-param3=A']
编辑
好吧,我忘了提到 param1、param2、param3 实际上不共享相同的"param"
字符串。如果我们必须"p=1-q=1.e-01-r=A"
拆分为相同类型的列表["p=1", "q=1.e-01", "r=A"]
呢?
编辑
>>> re.split("(?:-)(?=[a-z]+)", "p=1-q=1.e-01-r=A")
['p=1', 'q=1.e-01', 'r=A']
我知道参数名称不能携带任何-
,因此为我做这项工作。
谢谢,伙计们!
通过使用非捕获组和积极的前瞻,仅当'-'
后跟'param'
时才捕获它:
import re
string = "param1=1-param2=1.e-01-param3=A"
print(re.split(r"(?:-)(?=param)", string))
# ['param1=1', 'param2=1.e-01', 'param3=A']
正则表达式101上的现场演示
对于其他字符串,
试试这个 https://regex101.com/r/zwI2Mk/1,https://regex101.com/r/zwI2Mk/1/codegen?language=python