需要拆分两次字符串

时间:2014-11-30 21:51:01

标签: python python-2.7 split

由于我还在学习python,我需要一些帮助。

下面是一个刺痛,我需要2个独立的信息。我已经查找了如何从字符串中获取信息但所有示例以太列入列表或使用数字

msg= 'MFS: *CFSRES INC0020 01/12/14 07:51 RESPOND TEST ONLY, ALARM LEVEL: 1, 123 TESTSTREET TESTTOWN ,MAP: ,TG 100, == TESTING : UNIT HERE'

所以我想要的信息是1)仅限回应测试,警报级别:1 2)=测试:

刺痛总是会改变,但是RESPOND和=总是在那里。

我试过的代码:

msg='MFS: *CFSRES INC0020 01/12/14 07:51 RESPOND TEST ONLY, ALARM LEVEL: 1, 123 TESTSTREET TESTTOWN ,MAP: ,TG 100, == TESTING : UNIT HERE'
print msg.split(RESPOND)

输出

'MFS: *CFSRES INC0020 01/12/14 07:51 "," TEST ONLY, ALARM LEVEL: 1, 123 TESTSTREET TESTTOWN ,MAP: ,TG 100, == TESTING : UNIT HERE'

所以我猜测string.split()不是我会使用或者需要以不同的方式使用它吗?

编辑:与pyttsx一起使用,因此将主要信息输出为字符串是如此之长

1 个答案:

答案 0 :(得分:1)

如前所述,您应该向我们提供有关您要从字符串中提取哪些数据的更多信息。

根据您的复杂程度,您应该使用正则表达式。 Python HowTo非常适合作为介绍。

你的例子可以解决如下:

import re
pattern = re.compile('(?P<prefix>.*)RESPOND(?P<middle>.*?)=(?P<postfix>.*)')

msg = 'MFS: *CFSRES INC0020 01/12/14 07:51 RESPOND TEST ONLY, ALARM LEVEL: 1, 123 TESTSTREET TESTTOWN ,MAP: ,TG 100, == TESTING : UNIT HERE'

match = pattern.match(msg)

if match:
    print '[PREFIX]', match.group('prefix')
    print '[MIDDLE]', match.group('middle')
    print '[POSTFIX]', match.group('postfix')
else:
    print 'NO MATCH!!'

输出:

[PREFIX] MFS: *CFSRES INC0020 01/12/14 07:51 
[MIDDLE]  TEST ONLY, ALARM LEVEL: 1, 123 TESTSTREET TESTTOWN ,MAP: ,TG 100, 
[POSTFIX] = TESTING : UNIT HERE

根据您想要的数据,您可以将正则表达式修改为几乎任何数据。

修改

我调整了regexpr,以便结果符合您的要求。 你可以做得更多,例如将警报级别提取为数字等

import re
pattern = re.compile('.*(RESPOND.*?ALARM\sLEVEL.*?),.*==\s(.*)\s:')

msg = 'MFS: *CFSRES INC0020 01/12/14 07:51 RESPOND TEST ONLY, ALARM LEVEL: 1, 123 TESTSTREET TESTTOWN ,MAP: ,TG 100, == TESTING : UNIT HERE'

match = pattern.match(msg)

if match:
  for group in match.groups():
      print group
else:
    print 'NO MATCH!!'

输出:

RESPOND TEST ONLY, ALARM LEVEL: 1
TESTING