我正在尝试使用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
。
答案 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
最多可测试两个字符,因此效率更高。