我无法实现能够执行此操作的高效算法。
我有一个来自我的进程的输出,其格式如下:
stringA*stringB-stringC-stringD....-stringN
我试图在一个变量中获取stringA,并将stringB和stringC连接到另一个变量中,同时转储其余变量。
var1 contain stringA
var2 contain stringA-stringB
到目前为止,我可以使用split来获取stringA:
cutstringA=longstring.split("*")[0]
但我找不到抓住stringB和stringC的方法,没有make 3调用split:
tmpstr=longstring.split("*")[1] #return stringB-stringC.....-stringN
cutstringB=tmpstr.split("-")[0] #return stringB
cutstringC=tmpstr.split("-")[1] #return stringC
cutstringBC="{}-{}".format(cutstringB, cutstringC) #return stringB-stringC
有没有更有效的方法来实现这一目标?或者唯一的方法是将大字符串多次断开,然后将我想要使用的部分连接在一起?
答案 0 :(得分:0)
您不需要为单个元素进行拆分,您可以拆分一次" *"获取第一个元素然后将剩余的字符串拆分为" - "并加入前两个元素:
s = "stringA*stringB-stringC-stringD"
spl = s.split("*",1)
a, b = spl[0],"-".join(spl[1].split("-",2)[0:2])
print(a,b)
stringA stringB-stringC
或str.translate
删除两个字符并拆分一次并加入:
s = "stringA*stringB-stringC-stringD"
tbl = str.maketrans("*-"," ")
spl = s.translate(tbl).split()
a,b = spl[0],"-".join(spl[1:3])
print(a,b)
stringA stringB-stringC
分裂将是最有效的。
答案 1 :(得分:0)
将字符串拆分为两种的另一种方法是使用regex
:
import re
s = "stringA*stringB-stringC-stringD-stringE"
m = re.match("(\\w+)\\*(\\w+\\-\\w+)\\b", s)
v1 = m.group(1)
v2 = m.group(2)
匹配后,我们将每个结果放入它自己的var中,结果是:
('stringA', 'stringB-stringC')