2013-02-19 91 views
0

我有一个输出,其长度和值会有所不同,我希望从中提取一个值。我想从一个字符串中提取一个字符串,其值将会改变

这是我的输出:

'+CPBR: 1,"111",129,"0|2|XX"^M' 

在这种情况下,我想提取的“XX”,

不过,我想提取“9X”如果值是:

'+CPBR: 1,"111",129,"01|2|9X"^M' 

有没有人知道这样做的好方法?

+2

你的字符串在格式上真的是一致的吗?如果是这样的话:'[-5:-3]'就能做到。如果不是,请详细解释输出的格式。 – mgilson 2013-02-19 13:48:18

+0

他们并不总是那么一致,因为你可以看到,这将为第一个输出,但不是第二个。它可以在XXXXX中读取,而不是XX。唯一的一致就是它在第二个|之后而在“ – user1281032 2013-02-19 14:13:51

+0

这就是是解决这一问题的:)重要信息的确切片结束。否则,我们只是在应该用来解析字符串哪种算法猜测。 – mgilson 2013-02-19 14:15:43

回答

1

可以使用regular expression这样的:

>>> string = '+CPBR: 1,"111",129,"0|2|XX"^M' 
>>> import re 
>>> re.search('\|([^|"]+)"',string).group(1) 
'XX' 
>>> string = '+CPBR: 1,"111",129,"0|2|9X"^M' 
'9X' 
>>> string = '+CPBR: 1,"111",129,"0|2|ABC"^M' 
'ABC' 

这将匹配之间的一切|和“不包含任何字符(|”)。

+0

这是我以为我想要的确切代码!你知道我如何从“X | Y | Z”得到| Y | Z或Y | Z。第一个分隔符是|最后是“感谢 – user1281032 2013-02-19 15:26:18

+0

鉴于格局! ”X | Y | Z“,正则表达式“ ”([^ |“] +)\ |([^ | ”] +)\ |([^ |“] +)“”将给出你三组:组(1)将X,(2)将Y和组(3)将是Z.然后可以重组的X,Y和Z的字符串作为你需要基。如果这是有帮助的,不要忘了接受的答案,P – isedev 2013-02-19 15:52:53

+0

完美的作品!谢谢 :) – user1281032 2013-02-19 16:21:54

1
In [2]: a=r'+CPBR: 1,"111",129,"0|2|XX"^M' 

In [3]: b=r'+CPBR: 1,"111",129,"01|2|9X"^M' 

In [4]: a.split('|')[-1][0:2] 
Out[4]: 'XX' 

In [5]: b.split('|')[-1][0:2] 
Out[5]: '9X' 
相关问题