在python中需要一个正则表达式来分隔信号定义

2024-10-01 13:36:07 发布

您现在位置:Python中文网/ 问答频道 /正文

包含信号定义的字符串的形式为

signal_a=(3=box1:soc1.sig_a1|box1:soc1.sig_a0;2=box2:band_x1;1=xbox:abis|xbox1:bbs.seg_b;0=trip:skip);signal_b=super:mario|repp:ver;signal_c=semi:six_sig;signal_d=(1=last:end|start:twist;0=demo:test)

我想分开信号定义并把它们放在一个列表中。就像下面这样

signalDefList = [
    'signal_a=(3=box1:soc1.sig_a1|box1:soc1.sig_a0;2=box2:band_x1;1=xbox:abis|xbox1:bbs.seg_b;0=trip:skip)',
    'signal_b=super:mario|repp:ver',
    'signal_c=semi:six_sig',
    'signal_d=(1=last:end|start:twist;0=demo:test)'
]

有人能帮我吗


Tags: bandsignal定义信号a1a0sigx1
2条回答

代码

See regex in use here

;(?=signal)

替换:\n

用法

See code in use here

import re

r = r";(?=signal)"
s = "signal_a=(3=box1:soc1.sig_a1|box1:soc1.sig_a0;2=box2:band_x1;1=xbox:abis|xbox1:bbs.seg_b;0=trip:skip);signal_b=super:mario|repp:ver;signal_c=semi:six_sig;signal_d=(1=last:end|start:twist;0=demo:test)"
print re.split(r,s)

输出:

['signal_a=(3=box1:soc1.sig_a1|box1:soc1.sig_a0;2=box2:band_x1;1=xbox:abis|xbox1:bbs.seg_b;0=trip:skip)', 'signal_b=super:mario|repp:ver', 'signal_c=semi:six_sig', 'signal_d=(1=last:end|start:twist;0=demo:test)']

结果

输入

signal_a=(3=box1:soc1.sig_a1|box1:soc1.sig_a0;2=box2:band_x1;1=xbox:abis|xbox1:bbs.seg_b;0=trip:skip);signal_b=super:mario|repp:ver;signal_c=semi:six_sig;signal_d=(1=last:end|start:twist;0=demo:test)

输出

signal_a=(3=box1:soc1.sig_a1|box1:soc1.sig_a0;2=box2:band_x1;1=xbox:abis|xbox1:bbs.seg_b;0=trip:skip)
signal_b=super:mario|repp:ver
signal_c=semi:six_sig
signal_d=(1=last:end|start:twist;0=demo:test)

解释

  • ;按字面意思匹配分号字符;
  • (?=signal)积极的前瞻性确保接下来的是signal字面意思

因为已经回答了,所以应该使用;(?=signal)

要获得所需的输出,请将其放入re.split()方法中:

import re
signalDefList = re.split(';(?=signal)', data)
signalDefList
#['signal_a=3=box1:soc1.sig_a1|box1:soc1.sig_a0;2=box2:band_x1;1=xbox:abis|xbox1:bbs.seg_b;0=trip:skip)',
# 'signal_b=super:mario|repp:ver',
# 'signal_c=semi:six_sig',
# 'signal_d=(1=last:end|start:twist;0=demo:test)']

相关问题 更多 >