处理多个子字符串中的字符串

时间:2015-03-04 23:47:40

标签: python

我无法实现能够执行此操作的高效算法。

我有一个来自我的进程的输出,其格式如下:

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

有没有更有效的方法来实现这一目标?或者唯一的方法是将大字符串多次断开,然后将我想要使用的部分连接在一起?

2 个答案:

答案 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')