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

时间:2017-07-20 10:39:32

标签: python regex

"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']

我知道参数名称的作业是否不能携带任何-

谢谢,伙计们!

2 个答案:

答案 0 :(得分:2)

通过使用非捕获组和正向前瞻,只有在'-'之后才捕获'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']

Live demo on regex101

答案 1 :(得分:0)