Python如何使用regex拆分字符串,但保留包含拆分分隔符的模式?

2024-10-03 09:15:46 发布

您现在位置: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']

做我的工作,因为我知道参数名不能携带任何-。你知道吗

谢谢,伙计们!你知道吗


Tags: 字符串importre编辑列表参数paramparam1
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

相关问题 更多 >