Python - 如何使用正则表达式拆分字符串,但保留包含拆分分隔符的模式?



"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

最新更新