拆分方法和存储

时间:2015-09-24 09:09:00

标签: python regex python-2.7

我正在尝试使用split方法从此字符串中获取最后一个值,即0:

d = 'Alert|6317fe57-6787-4132-b40e-6d2863c921cb|0' 

并存储一个名为m的变量。我使用下面的代码但由于某种原因它失败了:

import re
d = 'Alert|6317fe57-6787-4132-b40e-6d2863c921cb|0'
if re.split(('|')[-1], 'd') == 0:
    print 'ok'

虽然'ok'方法应该返回split,但我看不到正在打印0

1 个答案:

答案 0 :(得分:4)

首先,你的正则表达式是完全被破坏,正如你根本不想测试它一样,你会发现它很简单:

>>> re.split(('|')[-1], 'd')
['d']  # I doubt this is what you expected...

简而言之:

  • [-1]位置错误;
  • 您使用的是字符串文字'd'而非标识符d(因此您尝试处理的字符串实际上并未参与其中);
  • 括号实际上并不是表达式的一部分(并且它们完全是冗余的,('|')[-1] == '|'[-1]) - 另请注意,如果您希望输出包含匹配项,则只需要它们在正则表达式中结果;和
  • 管道字符|在正则表达式中具有语义含义,因此必须进行转义。

修复所有这些:

>>> re.split(r'(\|)', d)
['Alert', '|', '6317fe57-6787-4132-b40e-6d2863c921cb', '|', '0']
>>> re.split(r'(\|)', d)[-1]
'0'

即使你修复了正则表达式,你也会得到一个字符串'0',它永远不会等于0

>>> '0' == 0
False

Python是动态但强烈类型,因此不会隐式转换任何一个参数进行比较。您需要将字符串显式转换为整数:

>>> int('0') == 0
True

或与字符串比较:

>>> '0' == '0'
True

但是,实际上没有必要使用re.split;我只想使用标准字符串方法str.rsplit

>>> d.rsplit('|', 1)
['Alert|6317fe57-6787-4132-b40e-6d2863c921cb', '0']
>>> d.rsplit('|', 1)[1] == '0'
True

最小化了所需的拆分操作(以及新的字符串对象)的数量,或者只是测试str.endswith我想要的是什么:

>>> d.endswith('|0')
True

最多可测试两个字符,因此效率更高。